Oracle Database 10gのパッケージ内にオブジェクトタイプを作成することはできますか?何かのようなもの:
create or replace package my_package as
type my_type as object (
id number(15)
);
end;
与える:
エラー(3,9):PLS-00540:このコンテキストではオブジェクトはサポートされていません。
私が最終的にできることを探しているのは、ポリモーフィズムを使用するだけでなく、オブジェクトがテーブルにアクセスしてPL/SQLを使用できるようにすることです。これは、パッケージの外部で定義された型では許可されていません。
ありがとう、ジェフ
Oracle 11gリリース2の更新:
From Chapter 3 PL/SQL with Object Types of Oracle Database Object-Relational Developer's Guide :
PL/SQLブロック、サブプログラムまたはパッケージでのオブジェクト型の使用は、2段階のプロセスです。
SQL * Plusまたは他の同様のプログラムで、SQLステートメントCREATE TYPEを使用してオブジェクトタイプを定義する必要があります。
オブジェクト型を定義してスキーマにインストールすると、それを任意のPL/SQLブロック、サブプログラム、またはパッケージで使用できます。
PL/SQLで、データ型がユーザー定義型または定義したADTである変数を宣言します。
PL/SQLパッケージの外部で定義されたオブジェクトでPL/SQLを使用できます!!オブジェクトボディを使用する:
CREATE TYPE person_typ AS OBJECT (
idno NUMBER,
first_name VARCHAR2(20),
last_name VARCHAR2(25),
email VARCHAR2(25),
phone VARCHAR2(20),
MAP MEMBER FUNCTION get_idno RETURN NUMBER,
MEMBER PROCEDURE display_details ( SELF IN OUT NOCOPY person_typ ));
/
CREATE TYPE BODY person_typ AS
MAP MEMBER FUNCTION get_idno RETURN NUMBER IS
BEGIN
RETURN idno;
END;
MEMBER PROCEDURE display_details ( SELF IN OUT NOCOPY person_typ ) IS
BEGIN
-- use the PUT_LINE procedure of the DBMS_OUTPUT package to display details
DBMS_OUTPUT.PUT_LINE(TO_CHAR(idno) || ' ' || first_name || ' ' || last_name);
DBMS_OUTPUT.PUT_LINE(email || ' ' || phone);
END;
END;
/
このリンクからこの例をコピーして貼り付けました: http://www.mcs.csueastbay.edu/support/Oracle/doc/10.2/appdev.102/b14260/adobjint.htm