長い調査の後、私は次の問題の原因がわからないと判断しました! ステートメントが満たされた場合に列の値を増やすストアド プロシージャを作成したいのですが、プロシージャを匿名ブロックとして実行できますが、ストアド プロシージャとして実行することはできません。
ストアド プロシージャのコードは次のとおりです。
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 行目で単語 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;
そしてうまくいきます!!!いくつかのストアドプロシージャを正常に作成したので、ストアドプロシージャを作成する権限があると確信しています!
私は何か間違ったことをしていますか?問題の原因がわかりません。何か提案があれば、本当に感謝します:)
編集:何らかの理由で私の手順が間違ったスキーマを取得したため、その問題が発生しました! プロシージャを削除して再度作成しただけで修正されました!!!! とにかく時間をありがとう!