Sie sind nun wieder eingeladen, die Diskussion spezieller technischer Probleme mit zu verfolgen. Bitte schicken Sie Fragen, Anregungen oder Antworten zu den vorgestellten Themen – ebenso wie Ihre Kritik – an unsere e-Mail-Adressen: dieter.bender@bender-dv.de oder Redaktion@MidrangeMagazin.de
Frage:
Wir haben versucht mit SQL erstellte Tabellen mit ILE RPG-Programmen zu verwenden und bekommen einen Compiler-Fehler RNF2121 gemeldet, der besagt, dass das Record Format BESTE00001 bereits definiert ist und ignoriert wird. Die Umwandlung der Quelle scheitert, es wird kein Modul erstellt. Wie lässt sich dieser Fehler vermeiden?
Antwort:
Bei der Erstellung von Tabellen (Table) mit SQL wird ein Objekt der Art PF erstellt. Dateiname, Teildateiname und Format werden dabei mit dem gleichen Namen belegt. Der RPG-Compiler stört sich nun an den gleichlautenden Datei- und Formatnamen. Die naheliegendste Umgehung dieses Problems ist das Umbenennen des Formats in der F-Bestimmung des RPG Programms; damit lässt sich dann das gewünschte Programm erstellen.
Die Umbenennung erfolgt wie im folgenden Statement skizziert mit dem Schlüsselworteintrag RENAME:
An Ihrem Beispiel fällt ebenfalls der systemgenerierte Name BESTE00001 der Datei auf. Wenn bei dem CREATE TABLE Statement im SQL Langnamen verwendet werden, generiert das System einen Kurznamen. Hierzu wird der SQL Table Name auf fünf Stellen verkürzt und eine eindeutige Nummer als fünfstelliges Suffix hinzu generiert. Hierdurch ist sicher gestellt, dass alle beteiligten Namensregeln abgebildet werden. Nachteil an diesen generierten Namen ist allerdings, dass sie wenig aussagekräftig sind, von der Reihenfolge der Erstellung von Objekten abhängen können und zudem auf unterschiedlichen Systemen auch verschieden heißen könnten. Aus diesen Gründen ist dringend anzuraten das Generieren von Namen zu umgehen. Der ANSI SQL-Befehl CREATE TABLE erlaubt keine Angabe eines Systemnamens (was auf den meisten Plattformen auch keinen Sinn ergäbe).
Bei der ausschließlichen Verwendung von SQL (was ich empfehlen würde) werden einfach Langnamen verwendet und die Systemnamen sind nicht von Belang, da immer über die SQL-Namen zugegriffen wird und das System über das Datenbank-Repository selber sicherstellt, die Namen korrekt aufzulösen. Sind auch Programme mit Record Level Access in RPG, COBOL oder CL im Einsatz, so sollte man für SQL weiterhin sprechende Namen verwenden und die Namensvergabe selber in die Hand nehmen. Bei dieser Gelegenheit empfiehlt es sich, gleich dafür mitzusorgen, dass Formatname, Name des Members und Objektname des Physical Files nach einheitlichen Konventionen festgelegt werden.
Da Formate nicht umbenannt werden können, wird zuerst die Table mit SQL unter dem Namen erstellt, den später das Format haben soll. Dann wird die Table so umbenannt wie später der SQL-Name lauten soll und hierbei der Systemname entsprechend mit vergeben. Zuletzt wird das Member umbenannt, soweit dies überhaupt erforderlich oder gewünscht sein sollte.
In einem kleinen Beispiel soll eine Table BESTELL_POSITION erstellt werden; als PF-Name soll BESTPOS und als Formatname BESTPOSR festgelegt werden.
Zum eventuellen Umbenennen des Members muss auf OS/400 zurück gegriffen werden, da SQL keine Teildateien kennt.
RNMM FILE(BESTPOS) MBR(BESTPOSR) NEWMBR(BESTPOS) erledigt diese Aufgabe in unserem Beispiel.
Zum Schluss sei noch angemerkt, dass die Umbenennung von Views ebenfalls mit RENAME TABLE erfolgen kann.