web-dev-qa-db-ja.com

データ型のテーブル列を参照するOracleTypeを作成するにはどうすればよいですか?

次のコードを使用してtypeを定義しようとしています。

CREATE OR REPLACE TYPE MY_TYPE AS OBJECT (
    app_id        some_table_name.app_id%type
);

これを実行すると、エラーが発生します。

Error(4,32): PLS-00201: identifier 'some_table_name.app_id' must be declared

これの何が問題になっていますか?

10
AppleGrew

何が問題なのかは%typeはPL/SQL構文です。 SQLではサポートされていません。

私はそれが残念であることに同意します、そして私たちがこのような型宣言でテーブル列を参照することができればそれは本当に素晴らしいでしょう。残念ながら、Oracleは、過去2、3のバージョンで、TYPE実装への変更を実際に遅くしているため、近い将来、これが変更される可能性は低いと思います。

私が見たいのは本当にオラクルはこの構文をサポートしています:

CREATE OR REPLACE TYPE MY_TYPE AS OBJECT 
      (     one_row        some_table_name.%rowtype ); 

インターフェイスの動的オブジェクト:それはどれほどクールでしょうか?

21
APC

データベースで型を宣言するときにsome_table_name.app_id%typeを使用することはできません。これは、次の方法で行うことができます。

create table emp (empno number,
                  deptno dept.deptnp%type, -- NOT ALLOWED
                 );

NUMBER、VARCHAR2(10)などの組み込み型、またはmytypeなどのユーザー定義型のいずれかを使用する必要があります。

4
Tony Andrews