database - 在存储过程中动态填充 Oracle 游标

标签 database oracle stored-procedures oracle10g

我需要动态填充 Oracle 游标 (Oracle 10g)。 SQL 语句根据从不同表和列中提取的输入值进行更改。我不想做的是必须维护一个临时表,每次执行存储过程时都会截断并加载该临时表。这是我目前正在做的事情,但如果有其他选择,我将不胜感激的帮助:

存储过程

    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)        
);

最佳答案

这很简单,您可以使用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 将它们统一在引用游标中可能会有所帮助。

关于database - 在存储过程中动态填充 Oracle 游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/773387/

相关文章:

mysql - 使用 MySQL 触发器在同一表中更新行时插入新行

c# - 如何使用 C# Windows 窗体应用程序将 excel 文件上传到 sql 数据库表

oracle - 删除记录时的性能问题

mysql - SQL - 用户定义的变量和客户端 session 混淆?

sql - T-SQL 存储过程中的空比较

mysql - 删除和插入会为键 PRIMARY 抛出重复条目

database - 有没有办法查询特定表或列在 sqlite 中存储了多少数据?

Oracle 在用户使用相同密码时锁定用户

sql - 为什么有人稍后会在 Oracle 中使用 NoValidate 启用约束

sql - 选择 SQL Server 及以下的所有层次结构级别