【发布时间】:2019-12-17 21:50:37
【问题描述】:
如果时间允许,有人可以告诉我需要更改什么语法以适应从 oracle 到 db2 的要求吗?我希望使用 db2 命令行提示符 DB2 客户端版本 10.5.3。如果您需要更多信息,请告诉我。我将 VARCHAR2 更改为 VARCHAR 并将 NUMBER(3) 更改为 INT 以及 NUMBER(10 更改为 INT。非常感谢。Jean T.
DECLARE
v_count PLS_INTEGER := 0;
TYPE inv_rt IS RECORD (upc VARCHAR(20),
store INT,
inv_avail INT
);
TYPE inv_tt IS TABLE OF inv_rt;
inv_arr inv_tt;
CURSOR cur_data (in_date DATE)
IS
SELECT i.upc, i.storenumber, i.inv_avail - SUM(t.unitvolume) AS inv_avail
FROM zz_tran t,
zz_start_inv i
WHERE t.weekenddate <= in_date
AND t.upc = i.upc
AND t.storenumber = i.storenumber
GROUP BY i.upc, i.storenumber, i.inv_avail;
BEGIN
inv_arr := inv_tt();
FOR d IN (SELECT DISTINCT weekenddate
FROM zz_tran
ORDER BY weekenddate
)
LOOP
inv_arr := inv_tt();
OPEN cur_data (d.weekenddate);
FETCH cur_data BULK COLLECT INTO inv_arr;
CLOSE cur_data;
FORALL i IN inv_arr.FIRST .. inv_arr.LAST
UPDATE zz_tran
SET inv_avail = inv_arr(i).inv_avail
WHERE weekenddate = d.weekenddate
AND upc = inv_arr(i).upc
AND storenumber = inv_arr(i).store;
COMMIT;
END LOOP;
END;
/
【问题讨论】:
-
我认为您需要一个公用表表达式,该表达式可以联合起来。我只能勉强输入一个来解析单词,所以我不会有太多帮助。但也许这有助于其他人回答。
-
NUMBER(10) 不等于 INT。 INT 的最大值是 2,147,483,647,而 NUMBER(10) 的最大值是 9,999,999,999。您可能应该使用 DECIMAL(10)。