實務中常需在 DB2 實現 Oracle 功能,以下以 Oracle 8i / DB2 7.x 為例整理常用對照(方法不止一種,歡迎補充)。
-- Oracle
SELECT * FROM user.bsempms WHERE rownum <= n;
-- DB2
SELECT * FROM db2admin.bsempms FETCH FIRST n ROWS ONLY;
-- 或使用 ROW_NUMBER() OVER()
-- Oracle
SELECT sysdate FROM dual;
-- DB2
SELECT current timestamp FROM sysibm.sysdummy1;
-- Oracle
SELECT emp_no || emp_nam FROM bsempms;
SELECT concat(emp_no, emp_nam) FROM bsempms;
-- DB2
SELECT emp_no || emp_nam FROM db2admin.bsempms;
SELECT emp_no CONCAT emp_nam FROM db2admin.bsempms;
-- Oracle
DESC table_name;
-- 或查詢 user_tab_columns
-- DB2
DESCRIBE TABLE db2admin.table_name;
-- Oracle
SELECT a.* FROM bsempms a, bsdptms b WHERE a.dpt_no = b.dpt_no;
-- DB2
SELECT * FROM db2admin.bsempms
INNER JOIN db2admin.bsdptms
ON db2admin.bsempms.dpt_no = db2admin.bsdptms.dpt_no;
-- Oracle 右外連接
SELECT a.* FROM bsempms a, bsdptms b WHERE a.dpt_no = b.dpt_no(+);
-- Oracle 左外連接
SELECT a.* FROM bsempms a, bsdptms b WHERE a.dpt_no(+) = b.dpt_no;
-- DB2 右外連接
SELECT * FROM db2admin.bsempms
RIGHT OUTER JOIN db2admin.bsdptms
ON db2admin.bsempms.dpt_no = db2admin.bsdptms.dpt_no;
-- DB2 左外連接
SELECT * FROM db2admin.bsempms
LEFT OUTER JOIN db2admin.bsdptms
ON db2admin.bsempms.dpt_no = db2admin.bsdptms.dpt_no;
-- DB2 全外連接
SELECT * FROM db2admin.bsempms
FULL OUTER JOIN db2admin.bsdptms
ON db2admin.bsempms.dpt_no = db2admin.bsdptms.dpt_no;
-- Oracle
SQL> @$PATH/filename.sql;
-- DB2
db2 -tvf $PATH/filename.sql -- 檔案每行以 ; 結尾