2017-04-08 12 views
0

なぜ以下のコードでオブジェクトを作成できないのですか?dbaオブジェクトのテーブルタイプ

create or replace type typ_obj_dba_test as object (name_col 
        dba_objects.object_name%type); 

私はobject_nameを宣言する必要があります。

dba_objectsはビューなのですか?

答えて

1

"dba_objectsはビューなのですか?"

いいえテーブルの列でもできませんでした。 %TYPE構文はPL/SQLに限定されており、PL/SQLではなくSQL TYPEを作成しています。

この制限は、多くの開発者、特により動的なプログラミング言語のバックグラウンドに由来する開発者にとっては迷惑です。しかし、%TYPEの構文です。動的:参照される列がデータ型を変更すると、参照元オブジェクトが変更されます。

これは、ストアドプロシージャで変数やパラメータを宣言するときにうまくいきます。しかし、SQL型を使用してテーブルの列(*)を定義することができます。 1つの列の変更をそれを参照する誰が知っているか、どのように多くの列にカスケードするのは悪夢です。だからオラクルは私たちにそれを許していません。

私はあなたが明示的なデータ型宣言を使用する必要があります怖い:

create or replace type typ_obj_dba_test as object (
    name_col varchar2(30) 
); 

(*)それはテーブル定義でタイプを使用することが一般的にお勧めはありませんが、OracleはORDBMSのデータ構造をサポートしています。

関連する問題