如何在动态 sql (ORACLE PLSQL) 中获取局部临时变量中的计数 (*) 值

Posted

技术标签:

【中文标题】如何在动态 sql (ORACLE PLSQL) 中获取局部临时变量中的计数 (*) 值【英文标题】:how to get count(*) value in local temp variable in dynamic sql (ORACLE PLSQL) 【发布时间】:2012-07-23 07:37:50 【问题描述】:

我想在动态 plsql 语句中获取 count(*) 值。 我们可以把静态 stmt 写成:

select count(*) into tmp_cnt from table_info where nbr_entry='0123456789';

但是如何在编写动态 sql 语句时获取 tmp_cnt 值? 或任何其他方式将count(*) 值转换为tmp_cnt 变量?

【问题讨论】:

【参考方案1】:

也许是不同的 oracle 版本,但对我有用的是:

...
execute immediate 'select count(*) from ' || p_table_name into l_count;
...

【讨论】:

注意可能的 sql 注入风险 这适用于 12c,而接受的答案返回 ORA-06547:RETURNING 子句必须与 INSERT、UPDATE 或 DELETE 语句一起使用。【参考方案2】:

您可以使用 EXECUTE IMMEDIATE ... RETURNING INTO 来实现它:

function count_rows(p_table_name varchar2)
  return number
is
  l_count number;
begin
  execute immediate 'select count(*) from ' || p_table_name into l_count;
  return l_count;
end count_rows;

【讨论】:

这在 Oracle 中不起作用。 ORA-06547: RETURNING 子句必须与 INSERT、UPDATE 或 DELETE 语句一起使用。

以上是关于如何在动态 sql (ORACLE PLSQL) 中获取局部临时变量中的计数 (*) 值的主要内容,如果未能解决你的问题,请参考以下文章

在运行时访问 Oracle PLSQL 记录类型的元素

Oracle [存储过程] 执行动态拼接SQL语句并返回结果??

如何使用 pl sql 过程从结构仅在运行时知道的 oracle 表中动态获取数据?

如何使用 SQL 或 PLSQL 将多行数据插入 Oracle 中的表中?

sql2008如何连接操作oracle

如何修改plsql数据库列的属性值?