1

大きなクエリ(SPの一部でした)を実行し、その結果を確認する必要があります(多くのユニオンを持つ大きなSPのバグを見つけようとしています。部分に分割して、別々に実行したいと思います)。このSPにパラメータがほとんどない場合、どうすればよいですか?コード内でそれらを置き換えたくありません。このパラメーターのハードコードを使用して、ヘッダーにdeclareを追加するだけでよいでしょう。

私はこのようなことを試しました:

DECLARE

p_asOfDate DATE :=  '22-Feb-2011';

BEGIN

SELECT * from myTable where dateInTable < p_asOfDate;

END

しかし、INTOキーワードを使うべきだと言っています。この結果をIDEで表示するにはどうすればよいですか?(私はAquaデータスタジオを使用しています)

私はそれを非常に頻繁に行う必要があるので、簡単な解決策を見つけたらとても幸せになります

4

1 に答える 1

1

pl/sql コードの匿名ブロックを使用しています。pl/sql プロシージャでは、結果のターゲット変数を指定する必要があります。

したがって、最初に宣言セクションで結果を保持する変数を定義してから、結果データを挿入する必要があります。

DECLARE
  p_asOfDate DATE :=  '22-Feb-2011';
  p_result myTable%ROWTYPE;
BEGIN
  select * into p_result from myTable where dateInTable < p_asOfDate;
END

つまり、おそらく複数の行が返されるので、カーソルを使用して行を個別に取得します。

DECLARE
  CURSOR c_cursor (asOfDate IN DATE) is 
    select * from myTable where dateInTable < asOfDate;
  p_asOfDate DATE :=  '22-Feb-2011';
  p_result myTable%ROWTYPE;
BEGIN
  OPEN c_cursor(p_asOfDate);
    loop
      FETCH c_cursor into p_result;
      exit when c_cursor%NOTFOUND;
      /* do something with the result row here */
    end loop;
  CLOSE c_cursor;
END

結果を出力するには、たとえば次のようなものを使用できます。

dbms_output.put_line('some text' || p_result.someColumn);

または、SQL コマンドライン (sqlplus など) でクエリを実行し、結果をすぐにテーブルとして取得することもできます。

あなたの質問を正しく理解できたと思います...

アップデート

テストデータを挿入する別の方法を次に示します。

ツールの SQL 実行環境を使用して、pl/sql ブロッ​​クなしで SQL ステートメントを直接送信します。

変数部分の前に「&」を使用して、変数のプロンプトをトリガーします。

select * from myTable where dateInTable < &p_asOfDate;

結果は、このようにツールによってフォーマットされた方法で表示されるはずです。Aquaについては知りませんが、一部のツールには、SQLコードの外部でこれらのパラメーターを定義する機能があります。

于 2011-02-21T12:08:12.867 に答える