PDA

View Full Version : *null aus Datei mit SQL lesen



Robi
17-04-09, 13:55
Hallo *all
zum Wochenende noch ein kleines SQL Problem (V5R4)

ich muß aus einer Datei, die ab und zu NULL Werte enthält, Sätze mit SQL lesen

Bisher:
/exec Sql
+ select w1, w2, w3, w4 into :a1, :a2, :a3, :a4 from ... where ...
/end-exec

Wenn nun w3 *null ist, knallt das SQL
irgendwie ist mir was von "allownull" oder so ähnlich im Hinterkopf.
Finde ich aber nicht,
also, was muß ich machen ?

Danke
Robi

Fuerchau
17-04-09, 13:59
Für SQL gibts Anzeiger-Variablen (binär 5, 0)

select ...., : Feld : Anzeiger, ...

0 = vorhanden
-1 = NULL
-2 = abgeschnitten

BenderD
17-04-09, 14:03
entweder select coalesce(myNum, 0), coalesce(myAlfa, ' ')...
oder
select ... into :var1 :ind1, :var2 :ind2 ....
wobei dann die indx Variablen als b 5 0 deklariert werden

D*B


Hallo *all
zum Wochenende noch ein kleines SQL Problem (V5R4)

ich muß aus einer Datei, die ab und zu NULL Werte enthält, Sätze mit SQL lesen

Bisher:
/exec Sql
+ select w1, w2, w3, w4 into :a1, :a2, :a3, :a4 from ... where ...
/end-exec

Wenn nun w3 *null ist, knallt das SQL
irgendwie ist mir was von "allownull" oder so ähnlich im Hinterkopf.
Finde ich aber nicht,
also, was muß ich machen ?

Danke
Robi

Robi
17-04-09, 14:25
coalesce klappt, danke

Das mit dem Indikator hab ich nicht kapiert,

select feld1, indikator1 , feld2, indikator2 into :fel1, :indi1, :fel2, :indi2

???
Wie benenne ich diesen indikator1 ? Woher weiß sql das ich das 'Feld' als Pärchen (Feld + Indikator) haben will ?

Robi

BenderD
17-04-09, 15:29
... mit Brille wär das nicht passiert...

select feld, ... into :feld :ind, ...

beim into werden pro quellfeld zwei Zielfelder (ohne Komma dazwischen) angegeben und das 2. Feld als binary 5 0 deklariert, bei Datenstruktur als Ziel wird dann einfach noch ein Array of binary 5 0 mit angegeben.

D*B


coalesce klappt, danke

Das mit dem Indikator hab ich nicht kapiert,

select feld1, indikator1 , feld2, indikator2 into :fel1, :indi1, :fel2, :indi2

???
Wie benenne ich diesen indikator1 ? Woher weiß sql das ich das 'Feld' als Pärchen (Feld + Indikator) haben will ?

Robi

pwrdwnsys
17-04-09, 15:30
coalesce klappt, danke

Das mit dem Indikator hab ich nicht kapiert,

select feld1, indikator1 , feld2, indikator2 into :fel1, :indi1, :fel2, :indi2

???
Wie benenne ich diesen indikator1 ? Woher weiß sql das ich das 'Feld' als Pärchen (Feld + Indikator) haben will ?

Robi

Beim SELECT wird nichts weiter angegeben. Aber beim FETCH. Zum Beispiel:


01 SQLFILE-REC.
COPY DDS-ALL-FORMATS OF SQLFILE.

01 SQL-IND-FILE.
02 SQLIND-FIL PIC S9999 USAGE COMP-4 OCCURS 20 TIMES.
....
DECLARE C1 CURSOR
FOR SELECT *
FROM SQLFILE
WHERE ....


FETCH NEXT FROM C1 INTO :SQLFILE:SQLIND-FI

Karsten

Robi
17-04-09, 16:08
@D*B
stimmt nicht. Ich hab ja ne Brille!
also:
Mit sauberer Brille wär das nicht passiert.
Vielen Dank, ich hab tatsächlich nicht so genau hingesehen

@pwrdwnsys
auch dir danke
lange keine Cobol 'd-spec' s mehr gelesen.

nun hab ich's begriffen
schönes WE
Robi