Я совершенно новичок в 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.