Eine weitere Möglichkeit, SQL-Statements einzusetzen, ist die Verwendung so genannter "flexibler SQL". Diese gestattet Ihnen die Verwendung beliebiger SQL-Syntax.
Dieser Abschnitt 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.
Flexible 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'