Fakeman Geschrieben 12. Januar 2009 Teilen Geschrieben 12. Januar 2009 Ich habe folgendes Problem und brauche dringend Hilfe: Mein Problemkind ist Cobol in verbindung mit enbedded SQL ( DB2) auf dem Host. Dies hier funktioniert problemlos: EXEC SQL SELECT DATE(:DATUM-DB2-FORMAT)+ 1 DAY INTO :DATUM-DB2-RUECKGABE FROM SYSIBM.SYSDUMMY1 END-EXEC Dies erhöht die Zahl,(:DATUM-DB2-FORMAT) kann z.B Jahr plus Tagesanzahl sein um eins (1 DAY) und gibt mir ein Formatiertes Datum zurück. Allerdings brauche ich verschiedene Umrechnungen des Datums und möchte die 1 ( + 1 Day ) durch eine Variable ersetzen. So wie hier: EXEC SQL SELECT DATE(:DATUM-DB2-FORMAT)+ TAGESANZAHL DAY INTO :DATUM-DB2-RUECKGABE FROM SYSIBM.SYSDUMMY1 END-EXEC Das krieg ich aber ums Verrecken nicht zum Laufen, die Variable wird nicht erkannt. ( Bin bisher den Umweg über eine Schleife drumherum gegangen,bin aber damit nicht wirklich zufrieden, und komme so an einem Punkt auch nicht weiter ) Kann man bei Cobol überhaupt Variablen in SQL Statements Verwenden, oder ist das unmöglich ? Ich hab jetzt rauf und runtergegoogel, finde aber irgendwie nichts was mir weiterhilft. Habe nur verwirrendes über Prepaired Statements gefunden, und bin nicht sicher ob das überhaupt das richtige für mich ist. Deshalb hoffe ich dass hier der eine oder andere Cobol Profi zu finden ist, der mir ein wenig unter die Arme greifen könnte. Es wäre wirklich wichtig. Besten Dank im Vorraus. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 12. Januar 2009 Teilen Geschrieben 12. Januar 2009 Hallo, [...] EXEC SQL SELECT DATE(:DATUM-DB2-FORMAT)+ TAGESANZAHL DAY INTO :DATUM-DB2-RUECKGABE FROM SYSIBM.SYSDUMMY1 END-EXEC [...] Kann man bei Cobol überhaupt Variablen in SQL Statements Verwenden, oder ist das unmöglich ? [...] Du hast doch schon eine Variable in Verwendung :DATUM-DB2-FORMAT deshalb verstehe ich nicht was Du mit der Frage meinst. Geht es denn wenn du :TAGESANZAHL statt :TAGESANZAHL schreibst? Dann hab ich das auch mal versucht allerdings mit einer SQL-Datenbank. Ich habe nicht mit "DAY" gearbeitet sonder mit "+1 00:00:00", entspricht einem Tag. Die Zahl "1" solltest Du dann ersetzten können. Achtung da gibt es eine "Grenze" von 99 Tagen, zumindest bei mir ist das so. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Fakeman Geschrieben 12. Januar 2009 Autor Teilen Geschrieben 12. Januar 2009 Erstmal Danke für die Hilfe. Sogesehen hast du natürlich recht, ich benutze schon eine Variable, also müsste Cobol Damit auch umgehen können. Mir geht es aber nicht um diese Variable (:DATUM-DB2-FORMAT), sondern um das was dannach kommt, also um die Erhöhung. Wenn ich die 1 durch eine Programmvariable ersetze, ( die heisst in diesem Beispiel TAGESANZAHL),dann funktioniert das Statement nicht. Ich weiss halt nicht ob das grundsätzlich überhaupt machbar ist. Ich kriege das Programm nichtmal zum Laufen ( Fehler beim Bind ). Es heisst dann SQL Erorr -206. ( Spaltenname innerhalb der Subquery eines Insert-Ipdate oder-Delete Statements ist in der Tabelle nicht bekannt (in der From-Klausel des Selects fehlt evtl. der korrekte Objektname )) Irgend eine Idee ? Schöne Grüsse Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_KaelteContainer Geschrieben 12. Januar 2009 Teilen Geschrieben 12. Januar 2009 (bearbeitet) wir machen das bei uns wie folgt: beim prepare EXEC SQL PREPARE sql_befehl from 'SELECT {+ FIRST_ROWS } tab_n, tab_j, tab_b, tab_t FROM tabelle WHERE (tab_j >= ? and tab_j <= ? ) and [...] END-EXEC. beim open dann: EXEC SQL OPEN crs_sus using :ws-sql-jahr-von, :ws-sql-jahr-bis END-EXEC. die ? werden vom Compiler durch die Variablen :ws-sql-jahr-von und :ws-sql-jahr-bis ersetzt. sorry, falls das etwas kryptisch wirkt aber ich kann den Code hier nicht 1 zu 1 kopieren. wir benutzen übrigens die AcuBench 7.21 von Acucorp und eine Informix DB Bearbeitet 12. Januar 2009 von geloescht_KaelteContainer Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 12. Januar 2009 Teilen Geschrieben 12. Januar 2009 Hallo, [...]Wenn ich die 1 durch eine Programmvariable ersetze, ( die heisst in diesem Beispiel TAGESANZAHL),dann funktioniert das Statement nicht. [...] Geht es wenn Du schreibst: EXEC SQL SELECT DATE(:DATUM-DB2-FORMAT)+ [B][COLOR="DarkRed"]:[/COLOR][/B]TAGESANZAHL DAY INTO :DATUM-DB2-RUECKGABE FROM SYSIBM.SYSDUMMY1 END-EXEC (Doppelpunkt vor dem Wort 'Tagesanzahl' In deinem Ursprungspost fehlt dieser, ich weiß nicht ob es einfach nur ein Tippfehler war. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Fakeman Geschrieben 14. Januar 2009 Autor Teilen Geschrieben 14. Januar 2009 Hi und danke an alle. Das hier hat letztendlich funktioniert: EXEC SQL SELECT DATE(:DATUM-DB2-FORMAT)+:TAGESANZAHL DAY INTO :DATUM-DB2-RUECKGABE FROM SYSIBM.SYSDUMMY1 END-EXEC das Problem lag an der Kombination vom falschen Datentyp ( cobol erwartet hier eine PIC S9(003) USAGE COMP Variable ) plus den blöden Doppelpunkt. Zwei kleine Fehler die mich etliche Zeit gekostet haben. Schöne Grüsse und nochmals Danke für die Mühe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.