Nach einer looong Forschung habe ich entschieden, ich habe keine Ahnung, was das folgende Problem verursacht! Ich möchte eine gespeicherte Prozedur erstellen, die den Wert einer Spalte erhöht, wenn das eine Anweisung erfüllt. Ich kann die Prozedur als anonymen Block ausführen, aber ich kann es nicht als gespeicherte Prozedur ausführen!Oracle Stored Procedure "Das Symbol gefunden ..." Fehler
Hier ist der Code der gespeicherten Prozedur:
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;
ich einen Fehler in Zeile bekommen 3, die GEHALT „das Symbol Encountered‚sagt‘, wenn eines der folgenden erwartet: ....“ und ich bin den gleichen Fehler in Zeile 5 im "s" Buchstaben des Wortes Cursor bekommen, aber zu dieser Zeit sagt es ";" anstelle von "Gehalt". Das Compiler-Protokoll zeigt "unzureichende Berechtigungen", aber ich kann keine vernünftige Erklärung dafür finden. Ich habe versucht, den Code als anonymer Block wie folgt auszuführen:
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;
Und funktioniert super !!! Ich bin sicher, dass ich die Privilegien haben gespeicherte Prozeduren zu schreiben, weil ich einige erfolgreich erstellt haben!
Mache ich etwas so falsch? Ich kann nicht herausfinden, was das Problem verursacht, wenn Sie irgendwelche Vorschläge haben, würde ich das wirklich schätzen :)
EDIT: Aus irgendeinem Grund mein Verfahren falsch geraten Schema das ist, warum ich dieses Problem hatte! Ich habe nur das Verfahren fallen lassen und es neu erstellt und es repariert !!!! Danke für deine Zeit trotzdem!
Aus den Zeilennummern sieht es so aus, als würden Sie Ihre Prozedur in SQL * Plus kompilieren. Können Sie danach 'show error' eingeben und die gesamte Ausgabe veröffentlichen. Wenn das Problem Berechtigungen sind, sollte es einen Hinweis geben, was Sie vermissen. – Ben
Zuerst einmal vielen Dank für Ihre Zeit! Jetzt benutze ich SQL * Plus nicht. Ich habe die Zeilennummern manuell geschrieben, damit ich leicht auf sie zeigen konnte. Ich benutze Sql Entwickler btw. – VGe0rge
Bitte fügen Sie die vollständigen Fehlermeldungen hinzu. –