可以在PL/SQL中创建Oracle数据库对象类型吗?

jlp*_*lpp 22 oracle plsql

是否可以在Oracle Database 10g中的包内创建对象类型?就像是:

create or replace package my_package as 
    type my_type as object (
        id number(15) 
     ); 
end;
Run Code Online (Sandbox Code Playgroud)

得到:

错误(3,9):PLS-00540:此上下文中不支持该对象.

我最终希望能够做的是使用多态,但也允许对象访问表并使用PL/SQL,这在包外定义的类型中是不允许的.

谢谢,杰夫

l0b*_*0b0 25

Oracle 10g文档:

目前,您无法在PL/SQL块,子程序或包中定义对象类型.

所以,不幸的是,没有.


use*_*735 9

Oracle 11g第2版的更新:

第3章到使用PL/SQL与Oracle数据库对象类型对象类型- 关系开发人员指南:

在PL/SQL块,子程序或包中使用对象类型分为两步.

  1. 您必须使用SQL语句CREATE TYPE,SQL*Plus或其他类似程序来定义对象类型.

    在模式中定义并安装对象类型后,可以在任何PL/SQL块,子程序或包中使用它.

  2. 在PL/SQL中,然后声明一个变量,其数据类型是您刚刚定义的用户定义类型或ADT.

  • 最初的问题是关于在包内“创建”对象的。您的答复是关于在plsql块/包中“使用”对象...这是非常不同的主题。 (2认同)

The*_*heo 6

您可以在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;
/
Run Code Online (Sandbox Code Playgroud)

从以下链接复制粘贴此示例:http://www.mcs.csueastbay.edu/support/oracle/doc/10.2/appdev.102/b14260/adobjint.htm

  • 我知道它已经 9 岁了,但是伙计,这并没有解决这个问题。 (3认同)