1在实际工作做,cursor需要根据条件返回的参数动态拼接的SQL来定义,遇到这种情况,解决方案如下代码所示:

DECLARE
	QL VARCHAR(20);
	B  VARCHAR2(28);
	V_SQL VARCHAR2(2000);
	CUR_QL_NAME sys_refcursor; 
   begin
	   QL :='table_name';
	   B :='111';
	   V_SQL := CONCAT('SELECT  *
		                FROM ', QL  ,
		                ' WHERE BDCDYH =  ' , '''' ,B ,'''',';');
		raise notice '%', V_SQL;                   
		open CUR_QL_NAME for V_SQL ; 
	    end;                               
end;

2 据传入的条件拼接一个SQL(表名是通过参数传递的),将查询的内容存储到一个数组中,具体的操作如下所示:

declare -- 声明
         TYPE NumList IS TABLE OF varchar2(28) TYPE index by int;
         LST_BDCDYH NumList;
         param_table_name varchar2(20);
begin       
  param_table_name := 'test_table' ;  
  EXECUTE immediate concat('SELECT distinct bdcdyh FROM ' ,  param_table_name ) BULK COLLECT INTO  LST_BDCDYH;
 end;

3 据传入的条件拼接一个SQL(表名是固定的,条件是通过参数传递的),将查询的内容存储到一个数组中,具体的操作如下所示

  EXECUTE IMMEDIATE 'ALTER TABLE 表名 TRUNCATE PARTITION YM_'||v_tmp_ym||';

4 在存储过程中需要把查询结果放到指定的数组中

SELECT 列名 BULK COLLECT INTO 数组名称 FROM  表名 ;
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐