我正在开发 .net 平台的项目,并希望支持多种数据库类型。我想以通用格式将 DDL 保留在源代码控制之下,然后将其转换为数据库特定的 DDL 进行部署。
因此,我正在寻找能够将通用 DDL 转换为数据库特定 DDL 的实用程序。理想情况下,它可以开箱即用地支持 MSSQL 05/08、MySQL、Oracle、Postgres 和 DB2。
以下是我迄今为止找到的工具:
有谁对我提到的或了解其他人有经验吗?
我有一个看起来像这样的函数:
BEGIN
DROP DATABASE IF EXISTS db_1;
END;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误:无法从函数或多命令字符串执行 DROP DATABASE。
是否无法从 PostgreSQL 的存储过程中删除数据库?我正在使用 plpgsql。
我有一个包含以下列的表:
idvaluecreation_date目前,已经为id和value列创建了索引。
我必须在此表中搜索给定值,并希望尽可能快地进行搜索。但我真的不需要查看超过一个月的记录。因此,理想情况下,我想将它们从索引中排除。
实现这一目标的最佳方法是什么:
(PS.:“最好的解决方案”是指最方便、快捷、易于维护的解决方案)
我希望对此表进行以下修改:
添加:状态列 (varchar(20)) 日期列(时间戳)
我不确定该怎么做
String createTable = "Create table aircraft ("
+"aircraftNumber int,"
+"airLineCompany varchar(20),"
+"departureAirport varchar (20),"
+"fuelPercentage int,"
+"passengerCount int);";
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下命令删除物化视图-
DROP MATERIALIZED VIEW MVIEW_TB_NBN_DAILY
Run Code Online (Sandbox Code Playgroud)
出现如下图所示的错误。
我正在尝试更改 AWS Athena 表中的列名称。从old_name到new_name。
普通的DDL命令不会影响表(它们无法执行)。
是否可以更改列名而不从头开始删除并重新创建表?
在 Oracle 中,我尝试使用下面的代码将 CTE 的输出插入到临时表中,但出现错误。我不想提前创建临时表,它应该使用 CTE 中的列名和数据类型动态创建。
with cte as (
select ORDER_ID, STATUS_ID, CALL_DATE, SHIP_DATE,
UPDATE_USER_ID, UPDATE_TIMESTAMP,
row_number() over(partition by ORDER_ID order by update_timestamp desc) as rowno
FROM ORDER_HISTORY
where ORDER_ID in (1001,1002, 1003)
)
create table temp_recent_order as
select * from cte where rowno=1
Run Code Online (Sandbox Code Playgroud) 所以我在创建脚本时一直盲目地使用ansi_nulls on、quoted_identifier on,因为sqlserver在编写对象脚本时会自动生成它们。
我真的没有时间关心这些琐碎的废话:-)但我想必须提出这些问题。
鉴于这些是推荐的设置,是否有一个选项可以设置(a)每个数据库和(b)每个服务器,以便它们默认情况下始终处于打开状态,而不是通过单独的脚本?
如果是这样,如何/在哪里可以查看当前的默认设置?
这是一种随机行为(重新启动 mysql 会话后不会再次发生),当我将 DDL 查询包装在事务 T1 中,同时我使用select同一个表上的查询启动另一个事务 T2 时,DDL 查询卡在等待表中预期的元数据锁定,任何其他选择查询都会等待 DDL 查询完成。但是提交 T2 后,DDL 应该获得元数据锁并完成,但它仍然等待表元数据锁状态。
连接1查询:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER TABLE merchants ADD COLUMN temp6 varchar(255);
Run Code Online (Sandbox Code Playgroud)
连接2查询:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from merchants where account_id=null;
Empty set (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
查询的顺序是:
Server version: …Run Code Online (Sandbox Code Playgroud) ddl ×10
sql ×6
mysql ×2
oracle ×2
plpgsql ×2
postgresql ×2
sql-server ×2
.net ×1
alter-table ×1
constraints ×1
database ×1
dblink ×1
dml ×1
hive ×1
indexing ×1
java ×1
jdbc ×1
sql-scripts ×1