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

是否可以在PL/SQL中创建Oracle数据库对象类型?,oracle,plsql,Oracle,Plsql,是否可以在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 Database 10g中的包内创建对象类型?比如:

create or replace package my_package as 
    type my_type as object (
        id number(15) 
     ); 
end;
给出:

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

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

谢谢, 杰夫

来自:

当前,无法定义对象 PL/SQL块、子程序中的类型, 或者包裹


因此,不幸的是,没有。

您可以在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;
/

从以下链接复制粘贴此示例:

Oracle 11g第2版更新:

自:

在PL/SQL块、子程序或包中使用对象类型需要两个步骤

  • 必须使用SQL*Plus或其他类似程序中的SQL语句CREATE TYPE定义对象类型

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

  • 在PL/SQL中,然后声明一个变量,其数据类型为刚才定义的用户定义类型或ADT


  • 是的,只是增加了错误。谢谢。这在oracle 11.2中仍然不起作用。。。。这在Pascal和ADA(pl/sql的祖先)中都是可能的;所以我想我们会很快到达目的地,确实不能在PL/SQL中定义对象类型,但可以在PL/SQL之外定义的对象体中使用PL/SQL。jlpp做出了错误的假设。最初的问题是关于在包内“创建”对象。您的回答是关于“使用”plsql块/包中的对象。。。这是非常不同的话题。我知道它已经9岁了,但伙计,这并不能解决问题。