次のコードを使用して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
これの何が問題になっていますか?
何が問題なのかは%type
はPL/SQL構文です。 SQLではサポートされていません。
私はそれが残念であることに同意します、そして私たちがこのような型宣言でテーブル列を参照することができればそれは本当に素晴らしいでしょう。残念ながら、Oracleは、過去2、3のバージョンで、TYPE実装への変更を実際に遅くしているため、近い将来、これが変更される可能性は低いと思います。
私が見たいのは本当にオラクルはこの構文をサポートしています:
CREATE OR REPLACE TYPE MY_TYPE AS OBJECT
( one_row some_table_name.%rowtype );
インターフェイスの動的オブジェクト:それはどれほどクールでしょうか?
データベースで型を宣言するときにsome_table_name.app_id%type
を使用することはできません。これは、次の方法で行うことができます。
create table emp (empno number,
deptno dept.deptnp%type, -- NOT ALLOWED
);
NUMBER、VARCHAR2(10)などの組み込み型、またはmytype
などのユーザー定義型のいずれかを使用する必要があります。