KingBase 数据库写存储过程中cursor需要用动态拼接SQL的方法进行定义的问题
kingbase 数据库存储过程
·
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 表名 ;
更多推荐



所有评论(0)