Оператор вставки родительского дочернего элемента в один пакет Orcle - PullRequest
1 голос
/ 08 января 2020

Я совершенно новичок в Oracle, но получил опыт работы с MS SQL. В этом случае я должен использовать Oracle, однако.

У меня есть веб-страница, где я могу загрузить (упрощенно) документ и ввести заголовок для документа. Эта информация хранится в двух таблицах (Document_meta и Document_content). Для этого я использовал два оператора вставки

Parent-insert:

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

Child-insert:

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

, чтобы это работало, мне пришлось использовать триггер в 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:     := . ( @ % ; 

И я не знаю, как это решить? Возможно ли даже вставить данные, подобные этим, или мне нужно использовать функцию, которая вставляет данные в Parenttable и возвращает новый Id и после этой вставки в дочернюю таблицу?

Любая помощь приветствуется , Я использую Oracle 11 c Express.

1 Ответ

1 голос
/ 08 января 2020

В вашем 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;

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...