gpt4 book ai didi

oracle - 带引号的动态 sql 并立即执行

转载 作者:行者123 更新时间:2023-12-01 14:01:04 25 4
gpt4 key购买 nike

我在使用动态 sql 和引号时遇到了麻烦。当我 dbms_output sql_stmt 时,它输出有效/工作代码。应该如何编写 sql_stmt := 行以便我可以动态执行它?我也尝试过“:1 using”绑定(bind)变量语法,但没有成功。

这段代码的重点是收集表子集的统计信息。

set serveroutput on
--create this test table for working example.
--create table test3 as select table_name from user_tables where rownum <= 5;

declare
sql_stmt varchar2(500);
begin
for rec in (select table_name from test3)
loop
sql_stmt := 'exec dbms_stats.gather_table_stats (''SCOTT'',''' || rec.table_name || ''')';
dbms_output.put_line(sql_stmt);
execute immediate sql_stmt; -- <---Error is here---
end loop;
end;

我从立即执行 sql_stmt 得到的错误;行是:ORA-00900: 无效的 SQL 语句ORA-06512: 在第 8 行

最佳答案

EXEC 是一个 SQL*Plus 命令。如果您坚持使用动态 SQL,您可能希望将对 DBMS_STATS.GATHER_TABLE_STATS 的调用包装在一个匿名 block 中。

但是,您应该能够直接调用该过程,如下所示:

declare
sql_stmt varchar2(500);
begin
for rec in (select table_name from test3)
loop
dbms_stats.gather_table_stats ('SCOTT',rec.table_name);
end loop;
end;

关于oracle - 带引号的动态 sql 并立即执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16946562/

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