这个问题是相似的一对夫妇别人我已经在计算器上找到设置,但差异够我signficant保证一个新的问题,所以在这里它是:的结果获得结果从动态SQL在Oracle中
我想获得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
问题"How to return a resultset/cursor from a Oracle PL/SQL anonymous block that executes Dynamic SQL?"解决了问题的前半部分 - 将动态SQL执行到游标中。问题"How to make Oracle procedure return result sets"提供了类似的答案。网络搜索已经揭示了同一主题的许多变体,都只涉及到我的问题的前半部分。我发现this post解释了如何在SqlDeveloper中完成它,但是它使用了SqlDeveloper的一些功能。实际上,我使用的是自定义查询工具,因此我需要将解决方案自包含在SQL代码中。此自定义查询工具同样不具有显示print(dbms_output.put_line)语句输出的功能;它只显示结果集。这里还有one more possible avenue使用'execute immediate ... bulk collect',但是这个例子再次用dbms_output.put_line语句循环来呈现结果。 This link试图解决这个问题,但这个问题从来没有得到答案。
假定这是可能的,我会增加一个条件:我想这样做而无需定义函数或过程(由于有限的DB权限)。也就是说,我想执行一个包含动态SQL的自包含PL/SQL块,并在SqlDeveloper或类似工具中返回一个结果集。
所以总结:
- 我想执行任意SQL语句(因此动态SQL)。
- 该平台是Oracle。
- 该解决方案必须是一个没有程序或功能的一个PL/SQL块。
- 输出必须生成为规范结果集;没有打印报表。
- 输出必须呈现为在设定的SQLDeveloper不使用任何的SQLDeveloper特殊功能的结果。
有什么建议吗?
感谢您的意见,Gary。我不熟悉DBMS_SQL或XMLFOREST,所以我都读了一下。也许我错过了一些东西,但我不相信任何一种技术都会做我所要求的。关于你的DBMS_SQL建议,我看到2个问题。首先,它似乎需要预先了解目标声明中的内容。其次,它不会让我得到像SQL Server示例这样的简单结果集。一个解释:是的,我正在使用一个自定义的GUI工具,但该解决方案必须首先使用PL/SQL代码在SqlDeveloper中工作,而我不知道您提到的任何一种技术都可以做到这一点。 – 2010-04-07 14:56:59