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

oracle程序错误PLS-00103遇到符号“END”[关闭]

PLS-00103:在 oracle 函数中预期以下之一时遇到符号“IF”

PLS-00103 在 Oracle 游标中提供参数时 [重复]

oracle - PLS-00103 & ORA -06550 关于程序

在 Oracle 下创建存储过程时出错 - PLS-00103