データベースに200を超えるテーブルがある場合、標準のデータ型の代わりに%TYPE参照を使用する必要がありますか?
標準のデータ型と比較して%TYPEを使用すると、パフォーマンスが低下しますか?
私はOracleを初めて使用し、この質問は非常に基本的なものかもしれませんが、私のような初心者にとっては非常に重要だと思います。
TYPE キーワードはコンパイル時に解決され、パフォーマンスには影響しません。
保存されたプログラムとオブジェクトに柔軟性をもたらすため、できる限り使用するように努める必要があります。参照されるオブジェクトが変更され、それを参照するプログラムが TYPE 参照を使用して変更を行うと、その変更は呼び出し元で自動的に利用可能になります。単純に再コンパイルされ、新しい定義が使用されます。非 TYPE 参照を使用すると、定義されたフィールドの型が参照される列に対して大きくなりすぎて、プログラムが壊れる可能性があります。
たとえば、単純なテーブルがある場合:
CREATE TABLE A (I1 INTEGER, C1 VARCHAR2(10));
そのテーブルから読み取るストアド プロシージャがあります。
PROCEDURE P
var VARCHAR2(10);
BEGIN
SELECT C1 INTO var FROM A WHERE I1 = 1;
END;
これは、列の長さを変更するまで機能します。
ALTER TABLE A MODIFY C1 VARCHAR2(20);
これで、選択からエラーが発生する可能性があります。
このように手順を書くと:
PROCEDURE P
var A.C1%TYPE;
BEGIN
SELECT C1 INTO var FROM A WHERE I1 = 1;
END;
Oracle は実行時にプロシージャを再コンパイルし、TYPE 参照を検出するため、コードは影響を受けません。