【问题标题】:Why am I receiving end-of-file error? [closed]为什么我会收到文件结束错误? [关闭]
【发布时间】:2014-10-01 05:05:00
【问题描述】:

在 Oracle 中,我不断收到 PLS-00103 错误(遇到符号“文件结尾”) 我玩过 ;我没有找到解决办法。任何人 知道我的代码 sn-p 可能有什么问题吗? (错误在第 6 行)

    1  Create or Replace Trigger TaxGeneration
    2  After Insert on Pay_records
    3  For each row
    4  DECLARE
    5  tax number;
    6  BEGIN
    7  number := new.Netsalary%type;
    8  dbms_output.put_line(number);
    9  END
    /

【问题讨论】:

  • 我不认为使用可以使用new.Netalary%type。我认为您需要将其更改为PAY_RECORDS.NETSALARY%TYPE。 (请注意,大写并不是很重要,但由于 Oracle 默认为大写,我也这样做:-)。

标签: oracle plsql triggers


【解决方案1】:

你错过了 ;结束时;

END 总是需要一个 ;

您也不能将变量命名为“数字”,这是一个保留的 Oracle 关键字。试试 new_number (或其他),看看它是否有效。

另外,删除“%type”。这里没有必要。

Create or Replace Trigger TaxGeneration
After Insert on Pay_records
For each row
DECLARE
tax number;
BEGIN
    tax := :new.Netsalary;
    dbms_output.put_line(tax);
END;

【讨论】:

  • 修复了该错误,但现在我在第 1 行有一个错误,指出它是无效的 SQL 语句 (ORA-00900)。去掉or replace部分,还是一样
  • 我添加了另一条关于我看到的错误的评论,请再次检查。
  • 对触发器没有明显影响。现在它正在抱怨第 4 行(DECLARE)。 “PL/SQL:语句被忽略”
  • 还有一个小错误 - 您必须使用 :new 而不是 new
  • 谢谢弗兰克,我错过了那个。
【解决方案2】:

您的变量名称是“税”,“数字”是税变量的类型。

尝试“税 := new.Netsalary%type;” "dbms_output.put_line(tax);"

【讨论】:

  • 没看到,有点帮助,谢谢!虽然仍然有错误(现在是 ORA-00900)
【解决方案3】:

number := new.Netsalary%type;

应该是

tax := :new.Netsalary; --considering tax is the correct variable to be used

number是数据类型,不能作为变量名。

%type 是一个属性,可让您在自己的声明中复制字段、记录、嵌套表、数据库列或变量的数据类型。例如您不知道(或懒得找出)表 salary 中列 tax 的数据类型,并且您希望变量 l_tax 与列 tax 的数据类型相同,您会只需声明l_tax salary.tax%TYPE;


END /

应该是

END; /

END; 表示 PLSQL 块的结束,/ 告诉 SQL*Plus 执行 PLSQL 块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-18
    • 2020-09-14
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多