這個問題是相似的一對夫婦別人我已經在計算器上找到設置,但差異夠我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