プラットフォーム:Oracle
言語:PL / SQL
問題:プロシージャOUTカーソルをSQLDeveloperSQLWosksheetに出力したい。
Oracleの「Select*from Table(PipelinedFunction(Param))」を使用してプロシージャコードの出力カーソルを確認する方法を知っている人はいますか?
OracleストアドプロシージャからCrsytalReportsを使用しています。Crystalでは、プロシージャがカーソルを返す必要があり、カーソルをフェッチして読み取ります。
私が持っているプロシージャコードは現在機能していますが、プロシージャコードへの変更の影響を表示する最も簡単な方法を見つけたいと思います。SQLDeveloperを利用でき、その中で作成とSQLテストを行っています。SQL Developerのクエリ結果ウィンドウ(「SQLワークシート」)にすばやく結果を表示したいと思います。
関数を使用してプロシージャからカーソルを読み取る(簡単な)方法はありますか?(そしてそれをTable関数にパイプしますか?)
複雑なことはわかっていますが、コード変更の結果を確認できる場合に最もうまく対処します。記録結果を直接見ることができれば、報告書の作成がスピードアップします。
Table関数と、Oracleでのパイプライン化について少し知っています。一般的なカーソルとsys_refcursorについて少し知っています。私はタイプについて、そしてなぜそれらが必要なのかをよく知っています。(sys_regCursorは私たちをそれから遠ざけることになっているのではありませんか?)
現在のプロシージャは、適切ではあるが適切ではない一連のクエリを実行し、グローバル一時テーブル(GTT)に挿入し、GTTと元のテーブルから結合し、挿入を増やし、自己結合を増やしてから、結果をOUTカーソルに選択します。カーソルなどだけに頼るほうがいいかもしれませんが、現在の方法でレポートに結果を出すことができます。
私は(私たちの目的のために)SQLをかなりうまく処理できると思いますが、私はOracle固有の開発者ではありません...しかし、助けが必要です。
誰かがこれに出くわしますか?全体的なアイデアは、プロシージャコードの開発をスピードアップすることでしたが、出力を取得する方法を探すために2、3日を費やしました...私が考えていたものではありません。
更新:
私はウェブ上で見たスライバーに基づいたいくつかの頭の悪いスキームを試しました...など
Create or replace FUNCTION GET_BACKPLANE (
Node VARCHAR2 ) RETURN SYS_REFCURSOR
AS
RESULTS SYS_REFCURSOR;
BEGIN
Open Results for
Select Backplane(Results, Node) from Dual ;
... etc.
と
Create or replace Function GET_BACKPLANE (
NODE VARCHAR2 ) RETURN My_Table_Stru%ROWTYPE PIPELINED
AS
BEGIN ...
Oracleは、プロシージャからの出力カーソルを再参照することを検討しているとは思いません( "Results"は、プロシージャの最後のSELECTの結果を保持するsys_refcursorです)。それを定義し、開いて、手順から参照する方法がわかりません。
試すことができる場所にたどり着きませんでした
SELECT * FROM TABLE(GET_BACKPLANE( ... etc )
タイプミスやOracleGrammarの不良については申し訳ありませんが、数日が経ちました。