-
COBOL Subroutine mittels SQL aufrufen
Hallo Community,
bin neu hier und mit SQL Konform aber weniger mit COBOL.
Folgende Aufgabenstellung bzw. soll umgesetzt werden damit ein mobiles ERP-System mit den LIVE Daten interagieren kann:
Aufrufe über eine ODBC oder JDBC Schnittstelle mittels SQL gegen COBOL Subroutinen (aus PHP PDO [oder SQL Manager]).
Beispiel für 3 Parameter: CALL SCHEMA.SUBROUTINE(' PARAM1 PARAM2 PARAM3');
Erhaltende Fehlermeldung:
SQL-Status: 38501
Vendorencode: -443
Nachricht: [LBE9001] Programm SUBROUTINE in SCHEMA wurde aufgrund von MCH0801 beendet. Ursache . . . . : Das Programm SUBROUTINE in der Bibliothek SCHEMA wurde aufgrund der Nachricht MCH0801 beendet. Fehlerbeseitigung: Siehe die vorherigen Nachrichten.
Verarbeitung wurde beendet, da die hervorgehobene Anweisung nicht erfolgreich abgeschlossen werden konnte.
Weiß nicht ob ich hier richtig bin, ich versuche mal mein Glück .
-
Parameterübergabe falsch:
Fehlermeldung:
Nachrichtentext . . . . . . : Das entsprechende Argument für externe/interne
Parameter wurde nicht übergeben.
Andreas
Ein AS/400 Dinosaurier since 1989
-
versuch mal
CALL SCHEMA.SUBROUTINE('PARAM1' 'PARAM2' 'PARAM3');
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Zitat von Robi
versuch mal
CALL SCHEMA.SUBROUTINE('PARAM1' 'PARAM2' 'PARAM3');
Probiert, geht nicht. Ungültiges Token o.ä. ...
-
Zitat von nico1964
Parameterübergabe falsch:
Fehlermeldung:
Nachrichtentext . . . . . . : Das entsprechende Argument für externe/interne
Parameter wurde nicht übergeben.
OK, ich arbeite dran, aber generell antworter die COBOL Routine ja oder?
-
Zwischen die einzelnen Parameter müssen Kommata:
Code:
Call Schema.Subroutine('PARAM1', 'PARAM2', 'PARAM3');
Hast Du die Subroutine auch mit dem SQL-Befehl CREATE OR REPLACE PROCEDURE als stored procedure registriert?
Birgitta
-
Zitat von B.Hauser
Zwischen die einzelnen Parameter müssen Kommata:
Code:
Call Schema.Subroutine('PARAM1', 'PARAM2', 'PARAM3');
Hast Du die Subroutine auch mit dem SQL-Befehl CREATE OR REPLACE PROCEDURE als stored procedure registriert?
Birgitta
Hallo, also es soll ein Teil eines Programms, also nur eine bestimme Sequenz in einem Cobol Hauptprogramm angesprochen werden, ob da "Subroutine" der richtige Begriff kann ich nicht sagen, soweit habe ich es jedenfalls verstanden. Und Nein dieser "Teilbereich" ist nicht mit "CREATE OR REPLACE STORED PROCEDURE" versehen, die Frage ist ob er das muß oder ob es auch irgendwie anders geht ..
-
Ich bin jetzt nicht der Cobol-Programmierer, aber ...
kann die "Subroutine" von außerhalb des Cobol-Programms, also von einem anderen Cobol-Programm aufgerufen werden?
Wenn nein, dann kannst Du diese "Subroutine" auch nicht über SQL aufrufen.
In diesem Fall musst Du aus der "Subroutine" ein Programm machen und dieses mit CREATE OR REPLACE als Stored Procedure registrieren.
Sofern diese "Subroutine" von außen aufgerufen werden kann, musst Du diese "Subroutine" zunächst als SQL Stored Procedure registrieren (also mit CREATE OR REPLACE PROCEDURE).
Wenn Du die Registrierung über ACS (Access Client Solutions - Schemas) durchführst bekommst Du auch eine ganz gute Bedienerführung.
Erst dann wenn die "Subroutine" als Stored Procedure mit Input und Output-Parametern registriert ist, lässt sie sich auch aus einer SQL-Umgebung aufrufen.
Birgitta
-
Eine COBOL-Subroutine kann von außen nicht direkt aufgerufen werden.
COBOL hat nicht dieselbe Unterstützung bzgl. der Prozeduren wie ILERPG.
SQL erlaubt jedoch, jedes beliebige Hauptprogramm per Call mit Parametern aufzurufen.
Diese sind in COBOL dann in der Linkage-Section passend zu definieren und abzufragen.
Aber besser ist es auf jeden Fall, eine SQL-Prozedur als externe Prozedur mit passenden Aufrufkonventionen zu erstellen. Diese externe Prozedur darf dann wiederum ein anderes Hauptprogramm gerne aufrufen. Das nennt man dann Wrapper-Programm.
Um eine Prozedur eines Programmes aufzurufen, bedarf es für SQL der Registrierung einer Prozedur in einem Service-Programm.
Dies ist auch in COBOL möglich, wenn man ein COBOL-Modul erstellt und dieses dann in ein Service-Programm verpackt.
Die typische Subroutiene in COBOL wird mit PERFORM aufgerufen und entspricht im RPG der EXSR-Anweisung. Dahinter verbirgt sich nur leider kein CALL sondern ein GOTO mit einem Return, der wie ein "go to ." und einem passenden "Alter Label to proceed to" wirkt.
Daher ist ein Perform auch nicht rekursiv aufrufbar.
-
Zitat von Fuerchau
Eine COBOL-Subroutine kann von außen nicht direkt aufgerufen werden.
COBOL hat nicht dieselbe Unterstützung bzgl. der Prozeduren wie ILERPG.
SQL erlaubt jedoch, jedes beliebige Hauptprogramm per Call mit Parametern aufzurufen.
Diese sind in COBOL dann in der Linkage-Section passend zu definieren und abzufragen.
Aber besser ist es auf jeden Fall, eine SQL-Prozedur als externe Prozedur mit passenden Aufrufkonventionen zu erstellen. Diese externe Prozedur darf dann wiederum ein anderes Hauptprogramm gerne aufrufen. Das nennt man dann Wrapper-Programm.
Um eine Prozedur eines Programmes aufzurufen, bedarf es für SQL der Registrierung einer Prozedur in einem Service-Programm.
Dies ist auch in COBOL möglich, wenn man ein COBOL-Modul erstellt und dieses dann in ein Service-Programm verpackt.
Die typische Subroutiene in COBOL wird mit PERFORM aufgerufen und entspricht im RPG der EXSR-Anweisung. Dahinter verbirgt sich nur leider kein CALL sondern ein GOTO mit einem Return, der wie ein "go to ." und einem passenden "Alter Label to proceed to" wirkt.
Daher ist ein Perform auch nicht rekursiv aufrufbar.
Beim Versuch der Erstellung einer externen Stored Procedure mit LANGUAGE COBOL hat es im ersten Effekt daran gescheitert das ich nicht mehr als 29 Parameter festlegen konnte. Zum Aufruf des Programmes sind mindestens 49 IN Parameter notwendig. Dies ist auch unabhängig von der Größe des Datenfeldes bei 29 war Schluß .. Liege ich da richtig oder ist der Layer 8 das Problem?
-
Wie hast Du denn versucht die Routine zu definieren?
Mit irgendeinem Tool?
Lt. der aktuellen Dokumentation sind selbst bei der Registrierung von OPM Programmen 254 Parameter und bei ILE programms 2000 Parameter zulässig.
Und auf welchem IBM i Release bist Du überhaupt?
Birgitta
-
Wie hast Du denn versucht die Routine zu definieren?
Mit irgendeinem Tool? --> Nativ mit SQL auf dem System I Navigator
Lt. der aktuellen Dokumentation sind selbst bei der Registrierung von OPM Programmen 254 Parameter und bei ILE programms 2000 Parameter zulässig. --> ja ist mir auch rätselhaft
Und auf welchem IBM i Release bist Du überhaupt? --> System I Navigator Version 7 Release 1 / Windows 10 Pro ..
Similar Threads
-
By wilfried in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 19-07-17, 07:49
-
By jlindner in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 02-12-16, 14:02
-
By Norbertf in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 14-10-14, 20:32
-
By systemer in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 19-02-03, 08:33
-
By vogeste0 in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 03-04-02, 13:21
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks