View Full Version : dyn. SQL CRTSQLRPGI-Error
Ein DECLARE wird nicht ausgeführt.
Man kann das auch in der Compilerliste sehen.
Die Definition wird lediglich in das SQLPKG übernommen.
Der Compiler benötigt dies für die Referenz der Statements.
Dann ist das anscheinend so wie bei PLIST und KLIST, wobei die allerdings auch ganz an Ende des Programms stehen können?
Wie Radio Eriwan: im Prinzip ja, aber ...
RPG/LE ist ein Mehrphasen-Compiler, der halt Syntax prüft, Referenzen aufbaut und dann erst das Programm erstellt.
SQL wird als Pre-Compiler aufgerufen, generiert eine neue Quelle und hat nur 1 Phase, deshalb ist die Reihenfolge wichtig.
Als Hostvariablen können ja alle Programmvariablen verwendet werden. Allerdings erkennt der Precompiler auch hier keine Variablen, die nach ihrer Verwendung definiert werden.
Eigentlich liegt das nur daran, dass in der SQL-Programmierung eine bestimmte Reihenfolge eingehalten werden muss!
In der Declare-Section werden die Variablen und anschließend die Cursor definiert. Erst anschließend folgt der auszuführende Code. Das Set Option - Statement wird noch vor der Declare Section angegeben. Auch bei der Programmierung wird eine Quelle (allerdings in C!) erstellt.
... und genau in dieser Reihenfolge werden die SQL-Statements vom Precompiler (gleiches Programm für ALLE!) analysiert und Abweichungen mit Warnungen oder Abbrüchen quittiert.
Birgitta