gpt4 book ai didi

sql - 在 plsql 中立即执行

转载 作者:行者123 更新时间:2023-12-02 05:25:00 26 4
gpt4 key购买 nike

如何从这段代码中得到结果

EXECUTE IMMEDIATE 'SELECT * FROM ' || table_name

通过for循环

通常的方法是这样的

for items in (select * from this_table)
loop
htp.p(items.id);
end loop;

最佳答案

如果您真的需要select * from dynamic table name,那么我可能会选择dbms_sql

输入记录:

create type tq84_varchar2_tab as table of varchar2(4000);
/

输入一个结果集(它是一个记录数组):

create type tq84_varchar2_tab_tab as table of tq84_varchar2_tab;
/

执行选择并返回结果集实例的函数:

create or replace function tq84_select_star_from_table(table_name in varchar2) 
return tq84_varchar2_tab_tab
as
stmt_txt varchar2(4000);
cur number;
columns_desc dbms_sql.desc_tab;
column_cnt number;

result_set tq84_varchar2_tab_tab;

begin

stmt_txt := 'select * from ' || table_name;

cur := dbms_sql.open_cursor;

dbms_sql.parse(cur, stmt_txt, dbms_sql.native);
dbms_sql.describe_columns(cur, column_cnt, columns_desc);
dbms_sql.close_cursor(cur);


stmt_txt := 'select tq84_varchar2_tab(';

for i in 1 .. column_cnt loop

if i != 1 then
stmt_txt := stmt_txt || ',';
end if;

stmt_txt := stmt_txt || columns_desc(i).col_name;

end loop;

stmt_txt := stmt_txt || ') from ' || table_name;

-- dbms_output.put_line(stmt_txt);

execute immediate stmt_txt
bulk collect into result_set;

return result_set;


end tq84_select_star_from_table;

然后该函数可以与类似的东西一起使用:

declare
records tq84_varchar2_tab_tab;
begin

records := tq84_select_star_from_table('user_objects');

for i in 1 .. records.count loop
dbms_output.put_line (records(i)(5) || ': ' || records(i)(1));
end loop;

end;
/

关于sql - 在 plsql 中立即执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4803340/

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