Eine weitere Möglichkeit, SQL-Statements einzusetzen, ist die Verwendung so genannter "flexibler SQL". Diese gestattet Ihnen die Verwendung beliebiger SQL-Syntax.
Dieses Dokument behandelt folgende Themen:
Zusätzlich zu der im bisherigen Verlauf dieses Kapitels beschriebenen SQL-Syntax haben Sie mit flexibler SQL die Möglichkeit, beliebige SQL-Syntax zu verwenden.
<<
und
>>
Flexible SQL muss zwischen den Zeichen <<
und
>>
stehen. Sie kann beliebigen SQL-Text und
host-variables
enthalten. Mit flexibler SQL verwendete
host-variables
müssen als Präfix einen
Doppelpunkt (:) haben.
Fexible SQL kann aus einer Zeichenkette bestehen, die über mehrere
Zeilen gehen und ganze oder teilweise Kommentarzeilen enthalten kann (vgl.
PROCESS
SQL
-Statement).
Flexible SQL kann anstelle folgender SQL-Syntaxteile verwendet werden:
Flexible SQL kann auch zwischen den Klauseln eines
select-expression
verwendet werden:
SELECT selection << ... >> INTO ... FROM ... << ... >> WHERE ... << ... >> GROUP BY ... << ... >> HAVING ... << ... >> ORDER BY ... << ... >>
Anmerkung:
Der in flexibler SQL angegebene SQL-Text wird nicht vom
Natural-Compiler erkannt, sondern (mit ausgetauschten
host-variables
)
einfach in die SQL-Zeichenkette kopiert, die an das Datenbanksystem übergeben
wird. Demzufolge werden Syntaxfehler in der flexiblen SQL erst zur Laufzeit
erkannt, wenn die Datenbank das betreffende Statement ausführt.
SELECT NAME FROM SQL-EMPLOYEES WHERE << MONTH (BIRTH) >> = << MONTH (CURRENT_DATE) >>
SELECT NAME FROM SQL-EMPLOYEES WHERE << MONTH (BIRTH) = MONTH (CURRENT_DATE) >>
SELECT NAME FROM SQL-EMPLOYEES WHERE SALARY > 50000 << INTERSECT SELECT NAME FROM SQL-EMPLOYEES WHERE DEPT = 'DEPT10' >>
Innerhalb der flexiblen SQL können Sie auch so genannte "Textvariablen" angeben.
<<:T :host-variable
[LINDICATOR :host-variable]>>
|
Die Syntax-Elemente sind im Folgenden beschrieben.
:T:
|
Eine Textvariable ist eine
host-variable
mit dem Präfix :T: . Sie muss alphanumerisches Format haben.
Zur Laufzeit wird eine Textvariable innerhalb eines SQL-Statements durch ihren Inhalt ersetzt, d.h. die in der Textvariablen enthaltene Textzeichenkette wird in die SQL-Zeichenkette eingefügt. Nach dem Ersetzen werden nachfolgende Leerzeichen aus der eingefügten Textzeichenkette entfernt. Sie müssen selbst darauf achten, dass sich aus dem Inhalt
einer Textvariablen beim Einfügen ein syntaktisch korrektes SQL-Statement
ergibt. Insbesondere darf eine Textvariable keine
Ein Statement, das eine Textvariable enthält, wird immer im dynamischen SQL-Modus ausgeführt. |
LINDICATOR
|
LINDICATOR-Option:
Nach der Textvariablen können Sie das Schlüsselwort
Die Längenindikator-Variable muss Format/Länge I2 haben. Wenn Sie keine Wenn Sie eine Siehe auch allgemeine Informationen zu
|
DEFINE DATA LOCAL 01 TEXTVAR (A200) 01 TABLES VIEW OF SYSIBM-SYSTABLES 02 NAME 02 CREATOR END-DEFINE * MOVE 'WHERE NAME > ''SYS'' AND CREATOR = ''SYSIBM''' TO TEXTVAR * SELECT * INTO VIEW TABLES FROM SYSIBM-SYSTABLES << :T:TEXTVAR >> DISPLAY TABLES END-SELECT * END
Das generierte SQL-Statement (wie mit dem Systemkommando
LISTSQL
angezeigt) sieht wie folgt aus:
SELECT NAME, CREATOR FROM SYSIBM.SYSTABLES:T: FOR FETCH ONLY
Das ausgeführte SQL-Statement sieht wie folgt aus:
SELECT TABNAME, CREATOR FROM SYSIBM.SYSTABLES WHERE TABNAME > 'SYS' AND CREATOR = 'SYSIBM'