如何在动态 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 [存储过程] 执行动态拼接SQL语句并返回结果??
如何使用 pl sql 过程从结构仅在运行时知道的 oracle 表中动态获取数据?