【问题标题】:Oracle Stored Procedure "Encountered the symbol... " errorOracle 存储过程“遇到符号...”错误
【发布时间】:2012-04-20 17:58:54
【问题描述】:

经过长时间的研究,我决定我不知道是什么导致了以下问题!我想创建一个存储过程,如果满足语句,它将增加列的值。我可以将过程作为匿名块运行,但我不能将它作为存储过程运行!

这里是存储过程代码:

1 create or replace
2 Procedure RaiseSalary
3 Is
4 Salary number;
5 Cursor RaiseCursor
6 Is
7 Select Salary_A From Person Where Salary_A<400 for update of Salary_A;
8 Begin 
9 Open RaiseCursor;
10    Loop
11 Fetch RaiseCursor Into Salary;
12    Exit When RaiseCursor%Notfound;
13 Update Person Set Salary_A=(Salary + 200) Where Current Of RaiseCursor;
14    End Loop;
15 Close RaiseCursor;
16 Commit;
17 End;

我在第 3 行收到一个错误,上面写着“在预期以下情况之一时遇到符号“SALARY”:....”,我在第 5 行的“s”字母处遇到相同的错误字光标,但此时它说“;”而不是“工资”。编译器日志显示“权限不足”,但我找不到对此的合理解释。 我曾尝试将代码作为匿名块运行,如下所示:

 Declare
 Salary number;
 Cursor RaiseCursor
 Is
  Select Salary_A From Person Where Salary_A<400 for update of Salary_A;
  Begin
  Open RaiseCursor;
    Loop
  Fetch RaiseCursorInto Salary ;
    Exit When RaiseCursor%Notfound;
  Update Person Set Salary_A =(Salary + 200) Where Current Of RaiseCursor;
    End Loop;
  Close RaiseCursor;
  Commit;
  End;
  .
  run;

而且效果很好!!!我确信我有编写存储过程的权限,因为我已经成功创建了一些存储过程!
我做错了什么吗?我不知道是什么导致了问题,如果您有任何建议,我将不胜感激:)

编辑:由于某种原因,我的程序出错了架构,这就是我遇到这个问题的原因!我只删除了程序并再次创建它并修复了!!!! 无论如何感谢您的宝贵时间!

【问题讨论】:

  • 从行号看来,您正在使用 SQL*Plus 编译您的过程。您可以在此之后键入show error 并发布所有输出。如果问题出在权限上,它应该会提示您丢失了哪些权限。
  • 首先感谢您的宝贵时间!现在,我不使用 SQL*Plus,我已经手动编写了行号,因此我可以轻松地指向它们。顺便说一句,我使用 Sql Developer。
  • 请包含完整的错误信息。
  • 我已经包含了我收到的所有错误消息、权限不足和所有这些东西。除此之外,我的错误得到了解决,正如我在编辑帖子时所描述的那样:)

标签: database oracle symbols procedure


【解决方案1】:

让我指出,如果你这样做会更有效率:

UPDATE Person Set Salary_A=(Salary_A + 200)
 Where Salary_A<400

没有光标,没有循环。也会简单很多。

【讨论】:

    猜你喜欢
    • 2018-04-06
    • 1970-01-01
    • 2019-04-18
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 2020-09-10
    相关资源
    最近更新 更多