父子插入语句在一个 Oracle 包中



我是Oracle的新手,但有MS SQL的经验。但是,在这种情况下,我必须使用Oracle。

我有一个网页,我可以在其中上传(简化(文档并输入文档的标题。此信息存储在两个表(Document_meta 和 Document_content(中。为此,我使用了两个插入语句

父插入:

INSERT INTO DOCUMENT (TITLE) VALUES (:title) RETURNING DOCUMENTID INTO :documentId

子插入:

INSERT INTO CONTENT (SEQ_VSL_DOCUMENT,DOCUMENT) VALUES (:documentId,:blob)

为此,我必须在 de DB 中使用触发器,以检索文档元表中插入数据的新 ID。

触发代码:

create or replace TRIGGER DOC_INS 
BEFORE INSERT ON DOCUMENT_META 
FOR EACH ROW
BEGIN
SELECT DOC_ID.nextval
INTO   :NEW.DOCUMENTID
FROM   dual;
END;

这行得通。但是现在我必须把它移到一个包里。所以我尝试创建一个包,但没有任何运气。

包头如下所示:

create or replace PACKAGE PKG_DOCUMENT AS 
PROCEDURE insert_document(p_title VARCHAR2,p_content BLOB);
END PKG_DOCUMENT;

和身体像:

create or replace PACKAGE body PKG_DOCUMENT AS 
PROCEDURE insert_document(p_title VARCHAR2,p_content BLOB) AS
BEGIN
INSERT INTO document_meta(TITEL) VALUES (p_title);
RETURNING DOCUMENTID INTO docId;

INSERT INTO document_content(content,document_id) VALUES (p_content,docId);        
END insert_document;    
END PKG_DOCUMENT;

但这不会编译,我收到错误:

Error(5,19): PLS-00103: Encountered the symbol "DOCUMENTID" when expecting one of the following:     := . ( @ % ; 

我不知道如何解决这个问题?是否可以像这样插入数据,或者我是否必须使用将数据插入父表中并返回新 Id 并在此插入子表中的函数?

任何帮助,不胜感激。我使用 Oracle 11c Express。

您的package body中很少有问题,这些问题在以下代码中内联列出:

create or replace PACKAGE body PKG_DOCUMENT AS 
PROCEDURE insert_document(p_title VARCHAR2,p_content BLOB) AS
docid document_meta.DOCUMENTID%type; -- this must be declared
BEGIN
INSERT INTO document_meta(TITLE) VALUES (p_title) --; -- removed semicolon and spelling of TITLE was incorrect
RETURNING DOCUMENTID INTO docId;
INSERT INTO document_content(content,document_id) VALUES (p_content,docId);        
END insert_document;    
END PKG_DOCUMENT;

干杯!!

相关内容

最新更新