Oracle存储过程"遇到符号..."错误

VGe*_*rge 1 database oracle symbols procedure

在进行了一项研究后,我决定不知道是什么导致了以下问题!我想创建一个存储过程,如果满足一个语句,将增加列的值.我可以作为匿名块运行该过程,但我不能将其作为存储过程运行!

这是存储过程代码:

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;
Run Code Online (Sandbox Code Playgroud)

我在第3行收到一个错误,说"遇到符号"SALARY"当期待下列之一时:......"我在第5行得到了相同的错误,在字母Cursor的"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;
Run Code Online (Sandbox Code Playgroud)

并且工作得很好!!!我确信我有权编写存储过程,因为我已经成功创建了一些!
我做错了吗?我无法弄清楚导致问题的原因,如果您有任何建议我真的很感激:)

编辑:由于某种原因我的程序错误架构,这就是为什么我有这个问题!我只删除了程序并再次创建它并修复了!不管怎样,谢谢你的时间!

eao*_*son 6

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

UPDATE Person Set Salary_A=(Salary_A + 200)
 Where Salary_A<400
Run Code Online (Sandbox Code Playgroud)

没有光标,没有循环.它也会简单得多.