Zum Inhalt springen

COBOL DB2/SQL Dringendes Problem


Fakeman

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von geloescht_KaelteContainer
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...