我在Oracle中有一个带有varchar2参数的过程.根据该参数的值,我需要定义一个游标.光标将根据参数的值在不同的表上运行.
我想做类似下面的事情,但它在CURSOR定义代码段中抛出一个错误.有任何想法吗?
- PROCEDURE GET_RECORDS(v_action IN VARCHAR2)
- IS
- CURSOR get_records
- IS
- IF(v_action = 'DO THIS') THEN
- SELECT * from <THIS>;
- ELSE
- SELECT * from <THAT>;
- END IF;
- BEGIN
- OPEN get_records;
- FETCH get_records
- INTO v_thing;
- v_loop := 0;
- WHILE get_records%FOUND
- LOOP
- FETCH get_records
- INTO v_thing;
- END LOOP;
- CLOSE get_records;
- END;
你需要一个REF CURSOR并打开它,例如:
- sql> CREATE OR REPLACE PROCEDURE GET_RECORDS(v_action IN VARCHAR2) IS
- 2 v_thing VARCHAR2(10);
- 3 get_records SYS_REFCURSOR;
- 4 BEGIN
- 5 IF (v_action = 'DO THIS') THEN
- 6 OPEN get_records FOR
- 7 SELECT 1 FROM dual;
- 8 ELSE
- 9 OPEN get_records FOR
- 10 SELECT 2 FROM dual;
- 11 END IF;
- 12
- 13 LOOP
- 14 FETCH get_records INTO v_thing;
- 15 EXIT WHEN get_records%NOTFOUND;
- 16 /* do things */
- 17 dbms_output.put_line(v_thing);
- 18 END LOOP;
- 19 CLOSE get_records;
- 20 END;
- 21 /
- Procedure created
- sql> exec get_records ('DO THIS');
- 1
- PL/sql procedure successfully completed
- sql> exec get_records ('DO THAT');
- 2
- PL/sql procedure successfully completed