web-dev-qa-db-ja.com

PL / SQL内にOracleデータベースオブジェクトタイプを作成できますか?

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を使用できるようにすることです。これは、パッケージの外部で定義された型では許可されていません。

ありがとう、ジェフ

22
jlpp

Oracle 10gのドキュメント から:

現在、PL/SQLブロック、サブプログラム、またはパッケージでオブジェクト型を定義することはできません。

ですから、残念ながら違います。

25
l0b0

Oracle 11gリリース2の更新:

From Chapter 3 PL/SQL with Object Types of Oracle Database Object-Relational Developer's Guide

PL/SQLブロック、サブプログラムまたはパッケージでのオブジェクト型の使用は、2段階のプロセスです。

  1. SQL * Plusまたは他の同様のプログラムで、SQLステートメントCREATE TYPEを使用してオブジェクトタイプを定義する必要があります。

    オブジェクト型を定義してスキーマにインストールすると、それを任意のPL/SQLブロック、サブプログラム、またはパッケージで使用できます。

  2. PL/SQLで、データ型がユーザー定義型または定義したADTである変数を宣言します。

9
user272735

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

6
Theo