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.
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 über mehrere Zeilen gehen und kann ganze oder
teilweise Kommentarzeilen enthalten (vgl. PROCESS SQL
-Statement).
Flexible SQL kann anstelle folgender SQL-Syntaxteile verwendet werden:
Flexible SQL kann auch zwischen den Klauseln einer 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 verarbeitet, 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 sogenannte 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 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 host-variables enthalten. 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 host-variable. |
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'