如何在立即执行中将表名添加到动态查询中?

Posted

技术标签:

【中文标题】如何在立即执行中将表名添加到动态查询中?【英文标题】:How to add table name into dynamic query in execute immediate? 【发布时间】:2015-10-30 13:49:25 【问题描述】:

我很困惑,因为我不知道如何在execute immediate 子句中使用变量作为字符串。

declare
  variable1 varchar2(30):
  cur sys_refcursor;
begin
  open cur for
    select tablename from table1;

  loop
    fetch cur into variable1;
    exit when cur %notfound;

    execute immediate 'select count(*)
                         into variable1
                         from user_tables
                        where table_name =''' || variable1 || '''';
  end loop;

  close cur;

end;

这里的variable1 是一个表名。应该有一个字符串值。怎么做?还是有错误。

【问题讨论】:

请注意,这里完全没有理由(也没有好处)使用动态 SQL。如果这是真正的问题,请使用静态 SQL。并将计数放入 integernumber 变量中,而不是放入 varchar2(30) 【参考方案1】:

立即执行语句应如下所示:

execute immediate 'select count(*) from user_tables where table_name ='''||variable1||'''' into variable1;

在查询后加上成xxx。

【讨论】:

更好用execute immediate 'select count(*) from user_tables where table_name = :var1' into variable1 USING variable1;

以上是关于如何在立即执行中将表名添加到动态查询中?的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 是不是支持“立即执行”命令来运行动态查询?

是否可以在没有准备语句的情况下使用动态表名在一个查询中执行此操作? [复制]

如何在存储过程中使用动态表名编写 Select 查询?

动态执行立即查询的问题

FOR中的SQL查询动态表名

使用传递给过程的动态表名立即执行