【发布时间】:2014-02-19 00:02:31
【问题描述】:
我在带有MERGE 语句的存储过程中有一个动态sql,并使用EXECUTE IMMEDIATE <dynamic_sql> 执行它。当我通过 sql 工作表运行合并查询时,它会告诉我合并的行数。如何通过动态sql检索相同的信息?
我将不胜感激任何针对这个问题的努力。
【问题讨论】:
我在带有MERGE 语句的存储过程中有一个动态sql,并使用EXECUTE IMMEDIATE <dynamic_sql> 执行它。当我通过 sql 工作表运行合并查询时,它会告诉我合并的行数。如何通过动态sql检索相同的信息?
我将不胜感激任何针对这个问题的努力。
【问题讨论】:
运行任何 SQL 语句(静态或动态)后,SQL%ROWCOUNT 变量会告诉您有多少行受到影响。
EXECUTE IMMEDIATE l_sql_stmt;
l_rows_affected := SQL%ROWCOUNT;
【讨论】:
integer、number 或 pls_integer 都应该是我发布的 sn-p 中 l_rows_affected 的有效数据类型。你可以用价值做任何你想做的事。 dbms_output 应该是一个非常轻量级的跟踪实用程序——您应该假设没有人会看到那里写入的数据。如果合并的行数很重要,您应该对结果进行一些处理——将其写入日志表、将其写入日志文件、从过程中返回,等等。
After running "any" SQL statement... :但不适用于选择查询,除非您将 Into 或 Using 子句与立即执行一起使用。