私の好みは、変数を宣言するために、常に %ROWTYPE を使用するか、できればカーソル FOR ループを使用することです。Back In The Day (tm) では、メモリの使用について多くのことを心配していました。そのため、個々のフィールドを宣言することで、数バイト節約できれば意味があるかもしれません。しかし、最近では、IMO では、ギガバイト単位で測定されたメモリ スペースがある場合、コードの複雑さの増大は、数バイトの節約の価値を上回ります。実行速度に関する限り - ああ、お願いします。私たちは、最も一般的な言語のいくつかが仮想マシンの下で実行される世界にいます。私は何時間もかけてアセンブラを手動で最適化し、タイトなループから最後のおかしなサイクルを絞り出しました。Javaは私を笑わせます。VM の下でソフトウェアを実行している場合、「書き込むサイクルが多すぎます!」ということになります。
各問題に対処するには:
私は、ほぼすべての操作にカーソル FOR ループを使用することを好みます。これは、Cunningham の質問 - 「機能する可能性のある最も単純なものは何ですか?」に答えようとする試みの一部です。行タイプ変数を使用する IMO は、最も単純なものです。それらを使用すると、 NO_DATA_FOUND および TOO_MANY_ROWS 例外を明示的に処理する必要がなくなります。
FOR aRow IN (SELECT col1, col2, col3
               FROM myTable
               WHERE some_col = some_value)
LOOP
  NULL;  -- do something useful here
END LOOP;
以上
DECLARE
  var1  myTable.COL1%TYPE;
  var2  myTable.COL2%TYPE;
  var3  myTable.COL3%TYPE;
BEGIN
  SELECT col1, col2, col3
    INTO var1, var2, var3
    FROM myTable
    WHERE some_col = some_value;
  NULL;  -- do something useful here
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    NULL;  -- do something appropriate here
  WHEN TOO_MANY_ROWS THEN
    NULL;  -- do something appropriate here
END;
それsome_colがユニークであることを私が知っていたとしても - 主に私が働いている場所では、今日ユニークであるものは、私が存在すら知らないチームの開発者の気まぐれで、明日は非ユニークになる可能性があるためです。これは「防御的プログラミング」と呼ばれるもので、午前 2 時に呼び出されないようにすれば、私はハッピー キャンパーです。
これを行うと、絶対に必要でない場合でもカーソルを開くオーバーヘッドが必要になると、誰かが不満を言うでしょう。何年にもわたるプログラミングの中で、これを行うとプログラムが非常に遅くなり、スタンドアロンのシングルトン SELECT を使用するようにコードを書き直さなければならないという状況に遭遇したことはありません。デジタル ジャングルの暗い深みのどこかで、クロック速度がまだ 1 桁のメガヘルツで測定されている荒野にいると思います。これは当てはまらないかもしれませんが、私がいる場所では(そして、私を信じてください、それは最先端ではありません)、それは十分な戦略です.
 
上記のルール #1 が主な理由で、SELECT またはカーソルの結果を保持するためのスタンドアロン変数を作成することはめったにありません。
 
オビ=ワンの言葉を正しく引用すると、「カーソルの FOR ループを使え、ルーク!」。(まじめな話、彼は本当にそう言った。「強制」的なものはすべて、難聴の映画監督が思いついたがらくたの集まりにすぎない。ふー!)のようなものを書く
FOR aRow IN (SELECT *
               FROM table1 t1
               INNER JOIN table2 t2 on (t2.fieldx = t1.fieldx)
               INNER JOIN table3 t3 on (t3.fieldy = t2.fieldy))
LOOP
  NULL;  -- whatever
END LOOP;
繰り返しになりますが、機能する可能性のある最も単純なものです。シンプルなほどよい。
 
:-)
共有してお楽しみください。