我已經將一堆DML(INSERT/UPDATE/DELETE)查詢從Oracle轉換爲PostgreSQL,現在我需要檢查它們是否生成相同的一組行,即刪除相同的行,假定使用oracle和postgresql數據庫包含相同的數據開始,更新更新相同的行等在PostgreSQL的一面,我可以用用DML語句返回條款,即Oracle相當於PostgreSQL INSERT ... RETURNING *;
INSERT INTO test(id, name) VALUES(42, 'foo') RETURNING *;
什麼好的上述聲明的是,我可以在前面加上「返回* '到任何DML語句而不知道結構,甚至不知道它執行的表的名稱,只是得到所有的行,比如它是一個select語句。
但是,Oracle方面似乎並不那麼光彩照人。根據文檔,Oracle 8i(我正在使用的)支持RETURNING子句,但它必須將結果存儲到變量中,似乎沒有明顯的方式來獲取所有結果列,而不是手動指定列名稱。
因此,問題是如果有一個oracle語句(或語句序列)來模擬PostgreSQL的'返回*'而沒有硬編碼表或列名稱。換句話說,有沒有寫這樣一個Oracle功能的方法:
fn('INSERT INTO test(id, name) VALUES(42, ''foo'')')
應該由SQL語句返回集插入(或修改一般情況下)行。
更新: 我實際上發現a very similar question(用於從SQL服務器,而不是PostgreSQL到Oracle的轉換)。不過,如果可能的話,我很樂意聽到更簡單的答案。
你是從Java調用這個SQL嗎? – 2012-01-11 14:22:32
不,實際上我是從一個python腳本調用它們,因此,編寫per-statement返回colname,1 colname2需要解析原始語句並提取列和表名,這不是我喜歡做的這樣一個小任務。 – alexk 2012-01-11 14:33:21
你爲什麼使用一個不支持和停止使用的Oracle版本? – 2012-01-11 15:09:15