Anmelden

View Full Version : SQL mit enthaltenen Parametern innerhalb von CL's



Seiten : 1 [2]

AG1965_2
07-12-15, 13:44
"CAT" steht für "concatenate" und heißt "zusammenfügen".
Das "T" steht für "trailing" und heißt, dass die Blanks des Feldes links von TCAT entfernt werden.
(es gibt auch ein BCAT, B für Beginning, das schneidet BLanks rechts weg.)
In CL kann man auch !< für TCAT und !> für BCAT verwenden, da zeigt die Spitze des Stanitzels in die Richtung, wo die Blanks entfernt werden.
Und die 4 auf 1 sind auch recht leicht erklärt: Damit innerhalb eines Strings 1 Hochkomma erhalten bleibt, muss man 2 angeben. Diese Zeichenfolge steht nun selber unter Hochkomma = 4 Hochkommas.

Pikachu
07-12-15, 13:59
*CAT / *BCAT / *TCAT (https://publib.boulder.ibm.com/iseries/v5r2/ic2924/info/rbam6/rbam6charstrngexp.htm) (B=Blank und T=Truncate)

Command delimiters (https://publib.boulder.ibm.com/iseries/v5r2/ic2924/info/rbam6/rbam6delimeters.htm) > Because an apostrophe inside a quoted string is paired with the opening apostrophe (delimiter) and is interpreted as the ending delimiter, an apostrophe inside a quoted string must be specified as two apostrophes. A pair of adjacent apostrophes used this way is counted as a single character.

kitvb1
07-12-15, 14:29
Wie ich schon sagte, Textkonstanten sind in HOCHKOMMA zu übergeben:
DCL &MDCX *CHAR(wie MDC + 2)

CHGVAR &MDCX ('''' *CAT &MDC *TCAT '''')

Beachte: die 4 Hockommas stellen 1 Hochkomma zur Verfügung!

SETVAR((MDC &MDCX)) meine Lösung für die verwirrendende '''' (es gibt mir Augenschmerz) ist, um ein Feld mit ihm zu erklären. Dann einfach *cat nach Bedarf. Dies funktioniert für CL und RPG.
DCL VAR(&Q) TYPE(*CHAR) LEN(1) VALUE('''')
CHGVAR VAR(&QRYSLT) VALUE(&QRYSLT *BCAT &Q *TCAT &CUSC +
*TCAT &Q *BCAT '*AND optn01 *EQ' *BCAT &Q *tCAT +
&OPTN *TCAT &Q)
Hoffe das hilft.

Fuerchau
07-12-15, 14:54
Der *TCAT ist erforderlich um die Leerzeichenbeim Like hinter dem "%" zu entfernen.
Denn sonst sucht SQL auf jeden Fall einen Wert der nach dem "%" mindestens noch genauso viele Leerzeichen enthält wie durch die Konstante definiert.
Lösen kann man das im SQL ggf. noch per TRIM-Funktion.

_MG_
12-12-15, 12:07
Danke für die vielen Rückmeldungen und die wirklich sehr guten Erklärungen von euch!! Damit löst man Probleme echt auf Anhieb, und vor allem versteht man die Probleme und die Lösungswege, was ja eigentlich das wichtigste ist. :-)

Danke!

Grüße
_MG_