%typeをオブジェクトタイプと一緒に使用できますか?しようとするとエラーが発生するので可能ですか?

Aug 22 2020

オブジェクトタイプで%typeを使用しようとしています

たとえば、

方法1:

  CREATE TYPE emp_object AS OBJECT(
    i_Emp_id Employee_table.emp_id%type,
    i_Emp_name  Employee_table.emp_name%type
    i_salary  Employee.salary%type);

しかし、メソッド1のようにオブジェクトタイプを作成できません...

メソッド2を使用してオブジェクトタイプを作成することはできますが、以下に説明するように、アプリケーションで使用すると機能上の問題が発生します。

方法2:

 CREATE TYPE emp_object AS OBJECT( i_Emp_id number, i_Emp_name  varchar2(10), i_Salary Number(13,9));

2番目の方法で直面している問題は、テーブルのSalary列のデータ型の精度を変更するたびに、オブジェクト型を変更して再作成する必要があることです。また、APIとUIのコードを変更する必要があります。オブジェクトタイプの作成中に%typeを使用できれば、これは確実に回避できます。しかし、Oracleがエラーをスローするため、これを行うことができません。オブジェクトタイプの列に%typeを適用する方法はありますか..助けてください...私はすべてを試しましたが、長い間このブロッカーに直面しています...

回答

1 TonyAndrews Aug 22 2020 at 09:11

いいえ、Oracleはオブジェクト属性の%TYPEをサポートしていません-%TYPEはSQLではなくPL / SQL構文であるためです。

i_salaryを精度とスケールのないNUMBERとして宣言しないのはなぜですか?