いくつかのシナリオがあります。
事前定義された順序で3つの異なるテーブルから列の値を読み取る必要があり、1つのテーブルのみがデータを保持します
指定された基準のレコードが存在する場合はtable1からデータを読み取り、指定された基準のTable2からデータを読み取ります
Oracleストアドプロシージャの場合
これらが現在処理されている方法は、最初に特定のクエリのカウントを変数に取得することです。カウントが0より大きい場合は、次のように同じクエリを実行して実際のデータを読み取ります。
select count(*) from table1 into v_count
if v_count > 0
then
select data into v_data from table1
end if;
Return v_data
これは、no_data_found例外を回避するために行われています。そうしないと、テーブルアクセスごとにno_data_found例外をキャッチするために3つの例外ハンドラブロックが必要になります。
現在、カーソルを使用してこれを再実装しているので、次のようになります。
cursor C1 is
select data from table1;
Open C1
Fetch C1 into v_data
if C1%FOUND
then
Close C1
Return v_data
End If
パフォーマンスの観点からどちらが優れているかを知りたいと思いました。カーソルを使用するものと、変数に対してSelectを実行し、3つのno_data_foundExceptionブロックを使用するものです。現在の2段階のクエリプロセスは使いたくありません。