... noch eine Anmerkung zum Variablen Scope:
1. Vor Release V5R3
In der Dokumentation war beschrieben, dass Host-Variablen nur einmalig in der Quelle definiert sein dürfen. Geprüft wurde das allerdings nicht.
2. Release V5R3
Die Eindeutigkeit der Host-Variablen wurde geprüft und falls die gleiche Variable mehrfach definiert war (lokal in mehreren Prozeduren) wurde die Compilierung mit einem Fehler Level 30 abgebrochen.
3. Release V5R4
Wurde die gleiche Variable mehrfach mit dem gleichen Datentyp und der gleichen Länge definiert, wurde lediglich eine Warnung mit Level 10 ausgegeben
Wurde die gleiche Variable mehrfach mit compatiblem Datentyp oder unterschiedlicher Länge definiert, wurde ein Fehler mit Level 20 ausgegeben
Wurde die gleiche Variable mehrfach mit unterschiedlichen Datentypen definiert, wurde ein Fehler mit Level 30 ausgegeben.
4. Release 6.1
Die gleiche Variable kann mehrfach mit unterschiedlicher Definition und verschiedenen Prozeduren definiert werden ohne eine Fehlermeldung zu prodzieren.

Was die Namensgebung angeht.
Wie Dieter bereits erwähnt hat, sollte keine Variable, Datenstruktur oder Cursor, die mit embedded SQL verwendet werden mit SQL oder SQ beginnen. Der Precompiler generiert zusätzliche Variablen, die mit diesen Buchstaben beginnen und IBM behält sich vor in Zukunft weitere benötigte Variablen mit dieser Namensgebung zu benennen.
Selbst wenn es heute keine Probleme gibt mit SQL+Irgendwas, könnte IBM in einem folgenden Release eine Hilfsvariable definieren und verwenden, die genau SQL+Irgendwas entspricht. Im besten Fall lassen sich die Programme dann nicht mehr Compilieren im schlimmsten Fall wird irgendwas zerschossen. Um diesen Problemen vorzubeugen, sollte man auf das vorangestellte SQL im Namen verzichten.

... und auch das ist irgendwo in der SQL Referenz oder Embedded SQL Programmierung beschrieben:
Das DECLARE-Statement muss in der Quelle physisch immer vor der OPEN-Anweisung stehen. (In welcher Reihenfolge dies ausgeführt wird ist unerheblich).

Birgitta