经过一项研究后,我决定不知道是什么导致了以下问题!我想创建一个存储过程,如果满足一个语句,将增加列的值。我可以作为匿名块运行该过程,但我不能将其作为存储过程运行!
以下是存储过程代码:
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;
并且效果很好!!!我确信我有权编写存储过程,因为我已经成功创建了一些!
我做错了吗?我无法弄清楚导致问题的原因,如果您有任何建议我会非常感谢:)
答案 0 :(得分:6)
我要指出,如果你这样做会更有效率:
UPDATE Person Set Salary_A=(Salary_A + 200)
Where Salary_A<400
没有光标,没有循环。它也会简单得多。