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