gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:22:27 26 4
gpt4 key购买 nike

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

最佳答案

这很简单,你可以使用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 中统一它们可能是有益的。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com