Oracle - PLS-00103:触发器 - 文件结束错误
Posted
技术标签:
【中文标题】Oracle - PLS-00103:触发器 - 文件结束错误【英文标题】:Oracle - PLS-00103: Trigger - End of file error 【发布时间】:2013-01-07 16:15:38 【问题描述】:我创建了上述触发器,但它给了我错误: PLS-00103:在预期以下情况之一时遇到符号“文件结尾”:;符号“;”被替换为“文件结尾”以继续
触发码:
CREATE OR REPLACE TRIGGER
subView_insert_tr INSTEAD OF INSERT ON VSubscriber
DECLARE
lendings Lending_tab ;
i INTEGER ;
copy_book_var Copy_list_T;
copy_book_vartemp REF Copy_list_T ;
BEGIN
lendings := :NEW.Lending_List;
INSERT INTO Subscriber (num_s, name) VALUES (:NEW.num_s, :NEW.name) ;
FOR i IN 1..lendings.COUNT LOOP
copy_book_vartemp := lendings(i).Copy_Book_REF;
SELECT DEREF(copy_book_vartemp) INTO copy_book_var FROM DUAL ;
INSERT INTO LENDING (num_s, num_c) VALUES (
:NEW.num_s, copy_book_var.num_c,
lendings(i).d_L) ;
END LOOP ;
END ;
/
【问题讨论】:
【参考方案1】:我认为问题在于这个插入
INSERT INTO LENDING (num_s, num_c) VALUES (
:NEW.num_s, copy_book_var.num_c,lendings(i).d_L) ;
修改一下,试试这个
CREATE OR REPLACE TRIGGER
subView_insert_tr INSTEAD OF INSERT ON VSubscriber
DECLARE
lendings Lending_tab ;
i INTEGER ;
copy_book_var Copy_list_T;
copy_book_vartemp REF Copy_list_T ;
BEGIN
lendings := :NEW.Lending_List;
INSERT INTO Subscriber (num_s, name) VALUES (:NEW.num_s, :NEW.name) ;
FOR i IN 1..lendings.COUNT LOOP
copy_book_vartemp := lendings(i).Copy_Book_REF;
SELECT DEREF(copy_book_vartemp) INTO copy_book_var FROM DUAL ;
INSERT INTO LENDING (num_s, num_c) VALUES (
:NEW.num_s, copy_book_var.num_c);
-- lendings(i).d_L) ;
END LOOP ;
END ;
/
【讨论】:
感谢 Dileep,我将代码行更改为: INSERT INTO LENDING (num_s, num_c, d_L) VALUES ( :NEW.num_s, copy_book_var.num_c, loans(i).d_L) ;但问题仍然存在。任何帮助将不胜感激。 @EffiongCharles 您能否在 Toad 中格式化代码,以便了解语法错误。这将帮助我们执行触发器。以上是关于Oracle - PLS-00103:触发器 - 文件结束错误的主要内容,如果未能解决你的问题,请参考以下文章
oracle程序错误PLS-00103遇到符号“END”[关闭]
PLS-00103:在 oracle 函数中预期以下之一时遇到符号“IF”
PLS-00103 在 Oracle 游标中提供参数时 [重复]