这个问题与我在 StackOverflow 上发现的其他几个问题相似,但差异对我来说足以证明一个新问题,所以这里是:
我想从Oracle中的动态SQL获取结果集,然后在类似SqlDeveloper的工具中显示为结果集,就好像我直接执行了动态SQL语句一样。这在 SQL Server 中很简单,所以具体来说,这是一个来自 SQL Server 的示例,它在 SQL Server Management Studio 或查询资源管理器中返回结果集:
EXEC sp_executesql N'select * from countries'
或者更准确地说:
DECLARE @stmt nvarchar(100)
SET @stmt = N'select * from countries'
EXEC sp_executesql @stmt
问题“如何从执行动态 SQL 的 Oracle PL/SQL 匿名块返回结果集/游标?” 解决了问题的前半部分——在游标中执行动态 SQL。“如何使 Oracle 过程返回结果集”问题提供了类似的答案。网络搜索揭示了同一主题的许多变体,所有这些都只解决了我问题的前半部分。我找到了这篇文章解释如何在 SqlDeveloper 中执行此操作,但这使用了 SqlDeveloper 的一些功能。我实际上正在使用自定义查询工具,因此我需要在 SQL 代码中独立包含该解决方案。此自定义查询工具同样无法显示打印 (dbms_output.put_line) 语句的输出;它只显示结果集。这是使用“立即执行...批量收集”的另一种可能途径,但此示例再次使用 dbms_output.put_line 语句循环呈现结果。此链接试图解决该主题,但该问题也从未在那里得到完全回答。
假设这是可能的,我将再添加一个条件:我想这样做而不必定义函数或过程(由于数据库权限有限)。也就是说,我想执行一个包含动态 SQL 的自包含 PL/SQL 块,并在 SqlDeveloper 或类似工具中返回一个结果集。
所以总结一下:
- 我想执行任意 SQL 语句(因此是动态 SQL)。
- 该平台是甲骨文。
- 解决方案必须是没有过程或函数的 PL/SQL 块。
- 输出必须作为规范的结果集生成;没有打印语句。
- 输出必须在 SqlDeveloper 中呈现为结果集,而不使用任何 SqlDeveloper 特殊功能。
有什么建议么?