我需要动态填充Oracle游标(Oracle 10g)。 SQL语句根据从不同表和列中提取的输入值进行更改。我不想做的是必须维护一个临时表,每次执行sproc时我都会截断并加载它。这是我目前正在做的事情,但如果有另一种选择,我会很感激帮助:
存储过程
PROCEDURE Get_Type_One_Polygon_Values(in_role VARCHAR2, rc_generic OUT SYS_REFCURSOR) as
BEGIN
execute immediate 'truncate table teamchk.temp_type_one_roles';
execute immediate 'INSERT INTO TEAMCHK.TEMP_TYPE_ONE_ROLES ' ||
'SELECT ' || in_role || '_POLY_ID, ' || in_role || '_POLY_NAME ' ||
'FROM TEAMCHK.' || in_role;
open rc_generic for
select * from teamchk.temp_type_one_roles;
END;
临时表
CREATE TABLE TEAMCHK.TEMP_TYPE_ONE_ROLES
(
ROLE_ID NUMERIC(38,0),
ROLE_NAME VARCHAR2(75)
);
答案 0 :(得分:3)
这很简单,您可以使用dynamic cursors ...
create or replace PROCEDURE Get_Type_One_Polygon_Values
(in_role VARCHAR2, rc_generic OUT SYS_REFCURSOR) as
sql varchar2(100);
BEGIN
sql :='SELECT ' || in_role || '_POLY_ID, '
|| in_role || '_POLY_NAME '
|| 'FROM TEAMCHK.' || in_role;
open rc_generic for sql;
END;
使用列别名POLY_ID和POLY_NAME在refcursor中统一它们可能是有益的。