Anmelden

View Full Version : per SQL aus ILE COBOL in DB2 schreiben?



rebe
23-03-05, 15:37
Hallo!

Ich möchte gerne per eingebettete SQL-Befehle in einem ILE COBOL Programm von einer ISeries V5M3R0 aus in eine DB2-Datenbank schreiben.

Das Problem kommt bei der Umwandlung mit CRTSQLCBLI. Der Compiler gibt die Wertigkeit 10 für diese Anweisung aus:

EXEC SQL insert into cw/tabelle

SQL1109 10 182 Spaltendefinitionen für Tabelle TABELLE in CW wurden in
AUFTRAG nicht gefunden. Zurückgegebener SQLCODE: -30070,
Nachricht: DDM-Befehl X'2012' nicht unterstützt.

Was kann man denn da machen? Muß die Definition der DB2-Tabelle anders sein oder kann man beim Umwandeln einen Parameter mit angeben?

Ich wäre für eure Hilfe sehr dankbar!

Schöne Grüße
Reiner

Fuerchau
23-03-05, 15:42
DDM-Dateien werden von SQL nicht unterstützt.

Das Verfahren ist da etwas anders:
Man nehme ein Kopie der zu verarbeitenden Tabellen lokal und erstelle das Programm.
Zusätzlich muss man sich mit der Ziel-DB per Connect verbinden.
Für das Ziel-System muss mittels CRTSQLPKG das SQLPKG erstellt werden.
Und dann funktionierts.

Ach noch was:
Durch den Connect wird das Programm mit der Datenbank verbunden. ALLE nachfolgenden SQL's laufen mit dieser DB.
Möchte man mit mehreren DB's umgehen, muss man per Connect die Verbindung wechseln, also immer per Connect in die Ziel-DB, per "Connect reset" in die lokale DB.

Mein Tool SQLCPY löst diese Probleme ;)

rebe
24-03-05, 13:31
Hallo Herr Fuerchau!

Vielen Dank für den Tipp. So wird es bestimmt laufen.
Einziges Problem jetzt: Das Erstellen des SQL-Pakets bricht auf der ISeries mit einem Serverdump ab.
Habe einen Call bei der IBM aufgemacht.

Ich hoffe die finden ein PTF dazu.

Grüße
R. Beimdiek

Fuerchau
24-03-05, 13:46
Das Problem betrifft die Sicherheitseinstellungen bei der Anmeldung. Das Problem habe ich dann, wenn ich einen anderen User als *CURRENT für das Zielsystem angebe und die Einstellungen des Zielsystems nicht passen (welche das sind weiß ich im Moment nicht).
Prüfe, ob du im STRSQL einen Connect zum Zielsystem machen kannst.

Beim CRTSQLRPG/I gibts du den Namen und die Lib für das spätere SQLPKG an !
Die Lib muss dann auf dem Zielsystem vorhanden sein. Ist das nicht der Fall gehts nicht. Am besten nimmst du da QGPL.
Das Paket hat auf dem Zielsystem dann leider die Berechtigung *PUBLIC *EXCLUDE !
Also auch da ggf. die Berechtigung anpassen.
Für das Paket gibts auch einen Levelcheck-Fehler, wenn du das Programm änderst. Das Paket ist dann neu zu erstellen.

rebe
24-03-05, 14:18
Hallo Herr Fuerchau!

Ja natürlich, das Verzeichnis für das SQL-Package muß auf dem DB2-Rechner vorhanden sein. Das war bei mir aber nicht. Jetzt wird auch das SQL-Package auf der DB2 erstellt.

Mich wundert nur, wenn ich auf dem DB2-Rechner nach der Erstellung reinschaue, dann sehe ich in dem Verzeichnis nichts! Aber es funktioniert!

Danke!

Grüße
R. Beimdiek

Fuerchau
24-03-05, 14:36
Ich nehme mal an deine Ziel-DB2 ist keine AS/400.
Ein SQLPKG wird dann innerhalb der DB2 abgelegt und ist kein Objekt wie auf der AS/400. Es gibt sicherlich eine Systemtabelle (auf AS/400 SYS2/SYSPACKAGE) wo dann ggf. die Infos abgelegt werden.