この質問は、StackOverflowで見つけた他のいくつかの質問と似ていますが、その違いは、新しい質問を正当化するのに十分なほど重要なので、ここにあります。
Oracleの動的SQLから結果セットを取得し、動的SQLステートメントを直接実行したかのように、それをSqlDeveloperのようなツールに結果セットとして表示したいと思います。これはSQLServerでは簡単なので、具体的には、SQL ServerManagementStudioまたはクエリエクスプローラーで結果セットを返すSQLServerの例を次に示します。
EXEC sp_executesql N'select * from countries'
またはより適切に:
DECLARE @stmt nvarchar(100)
SET @stmt = N'select * from countries'
EXEC sp_executesql @stmt
「動的SQLを実行するOraclePL/SQL匿名ブロックから結果セット/カーソルを返す方法」という質問。問題の前半、つまり動的SQLをカーソルに実行することで対処します。「Oracleプロシージャが結果セットを返すようにする方法」という質問でも、同様の答えが得られます。Web検索により、同じテーマの多くのバリエーションが明らかになりました。これらはすべて、私の質問の前半にのみ対応しています。この投稿を見つけましたSqlDeveloperでそれを行う方法を説明しますが、それはSqlDeveloperの機能のビットを使用します。私は実際にカスタムクエリツールを使用しているので、SQLコードに自己完結型のソリューションが必要です。このカスタムクエリツールにも同様に、print(dbms_output.put_line)ステートメントの出力を表示する機能はありません。結果セットのみを表示します。これは、「executeimmediate ... Bulkcollect」を使用するもう1つの可能な方法ですが、この例でも、dbms_output.put_lineステートメントのループを使用して結果をレンダリングします。このリンクはトピックに対処しようとしますが、質問はそこでも完全に答えられることはありませんでした。
これが可能であると仮定して、もう1つの条件を追加します。関数やプロシージャを定義せずにこれを実行したい(DB権限が制限されているため)。つまり、動的SQLを含む自己完結型のPL / SQLブロックを実行し、SqlDeveloperまたは同様のツールで結果セットを返したいと思います。
要約すると:
- 任意のSQLステートメント(したがって動的SQL)を実行したい。
- プラットフォームはOracleです。
- ソリューションは、プロシージャや関数のないPL/SQLブロックである必要があります。
- 出力は、正規の結果セットとして生成する必要があります。印刷ステートメントはありません。
- 出力は、SqlDeveloperの特別な機能を使用せずに、結果セットとしてSqlDeveloperでレンダリングする必要があります。
助言がありますか?