2

我需要动态填充 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)        
);
4

1 回答 1

3

这很简单,您可以使用动态游标...

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 中统一它们可能是有益的。

于 2009-04-22T13:28:41.347 回答