4
我需要使用其他SQL命令执行DDL命令(CREATE TABLE
)。看到下面的代码片段:使用DashDB(DB2)在复合SQL中执行DDL
CREATE TABLE test AS
(
SELECT duration AS NUM1
FROM event
WHERE duration IS NOT NULL
) WITH NO DATA;
INSERT INTO test (
SELECT duration AS NUM1
FROM event
WHERE event_duration_tech IS NOT NULL
);
我正在创建一个表,然后填充它。
如果我通过JDBC发送此代码,由于语句终止符(;
)错误,它不起作用。
如果我用BEGIN
和END
包装它来创建复合SQL块,它不起作用,因为DB2不允许在复合SQL块上使用DDL命令。
事情是,我需要一次执行两个命令。有任何想法吗?
它的工作原理,但一些奇怪的事情正在发生。如果我在'BEGIN'-END'块中使用'EXECUTE IMMEDIATE',它会正确创建表格。但是,如果在'BEGIN''END'块中放入'EXECUTE IMMEDIATE'和'INSERT'命令,我会收到以下错误:''“SCHEMA.test”是一个未定义的名称。SQLCODE = -204, SQLSTATE = 42704,DRIVER 3.66.46'。我想也许,出于某种原因,它试图首先执行'INSERT'。没有意义。 – matheusr
那么,为了编译'INSERT'语句,DB2需要访问要插入的表的目录信息,并且该表显然不存在。为了避免这种情况,你需要动态地执行'CREATE'和'INSERT'。 – mustaccio
就是这样,谢谢你,先生!我使用'EXECUTE IMMEDIATE'执行了'INSERT'命令。最终结果在这里http://pastebin.com/BNT9hVVd – matheusr