【发布时间】:2020-02-22 11:03:24
【问题描述】:
下面的过程代码 :: TYPE 行在编译时出错。让我知道这里创建表的正确用法。
CREATE OR REPLACE PROCEDURE bulk_order_export
(
startdate IN varchar2,
enddate IN varchar2,
batchsize IN varchar2
)
IS
bulkorderdata_cursor sys_refcursor ;
p_query_string VARCHAR2(100);
TYPE FBL_BACKUP_ORDER IS TABLE OF DPS_USER%TYPE;
temp_order_id FBL_BACKUP_ORDER;
BEGIN
p_query_string := 'SELECT ID FROM abc_order WHERE REGISTRATION_DATE BETWEEN :startDate AND :endDate';
OPEN bulkorderdata_cursor FOR p_query_string USING startdate, enddate;
LOOP
FETCH bulkorderdata_cursor BULK COLLECT into temp_order_id LIMIT batchsize;
FORALL i IN 1..temp_order_id.count
INSERT INTO FBL_BACKUP_ORDER VALUES(temp_order_id(i));
--COMMIT;
DBMS_OUTPUT.PUT_LINE('Commit '||temp_order_id.count||' inserted rows');
Total := Total+temp_order_id.count;
EXIT WHEN bulkorderdata_cursor%NOTFOUND;
END LOOP;
CLOSE bulkorderdata_cursor;
END;
【问题讨论】:
-
程序代码是高度特定于供应商的 - 所以请添加一个标签来指定您是否使用
mysql、postgresql、sql-server、oracle或db2- 或完全不同的东西。 -
您好,我正在使用 oracle
-
问题是我无法对临时表进行 decalre,我可以通过光标将批量收集的行插入到该临时表中。
-
错误信息是什么?
-
FBL_BACKUP_ORDER 是一个用户定义的类型。您无法插入其中,因为它不是表格。声明变量时正确使用它 -
temp_order_id。该变量是一个临时表 - (嗯,一个内存中的集合)并且您正在正确填充它。那么接下来你想做什么呢?插入 DPS_USER?
标签: sql oracle stored-procedures cursor