首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle对象关系- PLS-00538错误和PLS-00539错误

Oracle对象关系- PLS-00538错误和PLS-00539错误
EN

Stack Overflow用户
提问于 2021-04-27 17:09:15
回答 1查看 28关注 0票数 0

类型定义:

代码语言:javascript
复制
CREATE TYPE INTERVENTO_TY AS OBJECT(
  Testo VARCHAR2(20),
  Timestmp DATE
) NOT FINAL;

CREATE TYPE COMMENTO_TY UNDER INTERVENTO_TY(
  Ordine VARCHAR2(20)
);

CREATE TYPE POST_TY UNDER INTERVENTO_TY(
  Titolo VARCHAR2(20),
  MEMBER PROCEDURE AddCom(Ordine VARCHAR2, Testo VARCHAR2, Timestmp Date)
);

CREATE TYPE AUTORE_TY AS OBJECT(
  Nome VARCHAR2(20),
  Cognome VARCHAR2(20),
  IdAutore INT
);

CREATE TYPE MEDIA_TY AS OBJECT(
  Tipo VARCHAR2(20),
  Nome VARCHAR2(20),
  IdMedia INT,
  Titolo VARCHAR2(20)
);

CREATE TYPE SCRIVE_INTERVENTO AS TABLE OF REF INTERVENTO_TY;
CREATE TYPE DI_AUTORE AS TABLE OF REF AUTORE_TY;
ALTER TYPE INTERVENTO_TY ADD ATTRIBUTE DI DI_AUTORE CASCADE;
ALTER TYPE AUTORE_TY ADD ATTRIBUTE SCRIVE SCRIVE_INTERVENTO CASCADE;
CREATE TYPE IN_INTERVENTO AS TABLE OF REF INTERVENTO_TY;
CREATE TYPE CONTIENE_MEDIA AS TABLE OF REF MEDIA_TY;
ALTER TYPE INTERVENTO_TY ADD ATTRIBUTE CONTIENE CONTIENE_MEDIA CASCADE;
ALTER TYPE MEDIA_TY ADD ATTRIBUTE IN_INT IN_INTERVENTO CASCADE;
CREATE TYPE COMMENTATO_POST AS TABLE OF REF COMMENTO_TY;
ALTER TYPE COMMENTO_TY ADD ATTRIBUTE A REF POST_TY CASCADE;
ALTER TYPE POST_TY ADD ATTRIBUTE COMMENTATO COMMENTATO_POST CASCADE;

CREATE TABLE AUTORE_TAB OF AUTORE_TY
NESTED TABLE SCRIVE STORE AS SCRIVE_NESTED;

CREATE TABLE INTERVENTO_TAB OF INTERVENTO_TY
NESTED TABLE DI STORE AS DI_NESTED
NESTED TABLE CONTIENE STORE AS CONTIENE_NESTED;

CREATE TABLE MEDIA_TAB OF MEDIA_TY
NESTED TABLE IN_INT STORE AS IN_INT_NESTED;

我正在尝试编写一个对象过程来创建COMMENTO_TY的新实例,并将其添加到COMMENTO_TAB表和POST_TYCOMMENTATO嵌套表中,但它给出了以下错误:

代码语言:javascript
复制
CREATE OR REPLACE TYPE BODY Post_ty AS 
MEMBER PROCEDURE addComm(commento VARCHAR2, ordine NUMBER, IdAut INTEGER) AS
  NuovoCommento REF Commento_ty;
BEGIN
  INSERT INTO Intervento_tab I
  VALUES(Commento_ty(commento, SYSTIMESTAMP, 
                     DI_AUTORE(
                               (SELECT REF(A) FROM AUTORE_TAB A WHERE IdAutore = IdAut)
                              ),
                     CONTIENE_MEDIA(),
                     ordine,
                     (SELECT TREAT(REF(I) AS REF POST_TY)
                     FROM INTERVENTO_TAB I
                     WHERE VALUE(I) IS OF (POST_TY) AND
                           I.TIMESTMP = SELF.TIMESTMP)))
  RETURNING REF(I) INTO NuovoCommento;
  
  INSERT INTO TABLE(SELECT TREAT(VALUE(I) AS POST_TY).COMMENTATO
                    FROM INTERVENTO_TAB I
                    WHERE VALUE(I) IS OF (POST_TY)
                          AND I.TIMESTMP = SELF.TIMESTMP) 
  VALUES(NuovoCommento);
END addComm;
END;
/

第3行的PLS-00538: subprogram or cursor 'ADDCOM' is declared in an object type specification and must be defined in the object type body

第2行的PLS-00539: subprogram 'ADDCOMM' is declared in an object type body and must be defined in the object type specification

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-27 17:28:59

您有两个错误:

代码语言:javascript
复制
PLS-00538: subprogram or cursor 'ADDCOM' is declared in an object type specification and must be defined in the object type body

代码语言:javascript
复制
PLS-00539: subprogram 'ADDCOMM' is declared in an object type body and must be defined in the object type specification

注意一个拼写为ADDCOM,另一个拼写为ADDCOMM;您需要确保成员过程在规范和主体中具有相同的名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67280128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档