0

データベースに200を超えるテーブルがある場合、標準のデータ型の代わりに%TYPE参照を使用する必要がありますか?

標準のデータ型と比較して%TYPEを使用すると、パフォーマンスが低下しますか?

私はOracleを初めて使用し、この質問は非常に基本的なものかもしれませんが、私のような初心者にとっては非常に重要だと思います。

4

1 に答える 1

3

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 参照を検出するため、コードは影響を受けません。

于 2013-03-07T02:50:31.617 に答える