Что касается DPS_USER% TYPE, я предполагаю, что это таблица? Если это так, то синтаксис: DPS_USER% ROWTYPE.
Затем вам нужно убедиться, что ваши переменные определены, batchsize является числовым, а затем вы разобрались с некоторым синтаксисом, и вам будет хорошо идти
SQL> create table DPS_USER ( id int );
Table created.
SQL> create table abc_order ( id int );
Table created.
SQL> create table FBL_BACKUP_ORDER ( id int );
Table created.
SQL>
SQL>
SQL> CREATE OR REPLACE PROCEDURE bulk_order_export
2 (
3 startdate IN varchar2,
4 enddate IN varchar2,
5 batchsize IN int
6 )
7 IS
8 bulkorderdata_cursor sys_refcursor ;
9 p_query_string VARCHAR2(100);
10 TYPE FBL_BACKUP_ORDER IS TABLE OF DPS_USER%ROWTYPE;
11 temp_order_id FBL_BACKUP_ORDER;
12 total int;
13 BEGIN
14
15 p_query_string := 'SELECT ID FROM abc_order WHERE REGISTRATION_DATE BETWEEN :startDate AND :endDate';
16 OPEN bulkorderdata_cursor FOR p_query_string USING startdate, enddate;
17 LOOP
18 FETCH bulkorderdata_cursor BULK COLLECT into temp_order_id LIMIT batchsize;
19 FORALL i IN 1..temp_order_id.count
20 INSERT INTO FBL_BACKUP_ORDER VALUES temp_order_id(i);
21 --COMMIT;
22 DBMS_OUTPUT.PUT_LINE('Commit '||temp_order_id.count||' inserted rows');
23 Total := Total+temp_order_id.count;
24 EXIT WHEN bulkorderdata_cursor%NOTFOUND;
25 END LOOP;
26 CLOSE bulkorderdata_cursor;
27 END;
28 /
Procedure created.