Literale
literal ::= string-literal | integer-literal | floating-literal | datetime-literal | interval-literal string-literal ::= ' character [ ... ] '
Wird die Shellvariable YARDSTRING gesetzt, kann eine Stringkonstante
auch mit doppelten Anführungszeichen gekennzeichnet werden.
character ::= ASCII 8 Bit Zeichen, außer ASCII 0
integer-literal ::= [ + | - ] unsigned-integer-literal
unsigned-integer-literal ::= digit [ ... ]
digit ::= { 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 }
floating-literal ::= [ + | - ] unsigned-floating-literal
unsigned-floating-literal ::=
unsigned-integer-literal [ . unsigned-integer-literal ] [ { E | e } integer-literal ]
Bei DATETIME und INTERVAL Literalen wird der eigentliche Wert als Stringkonstante angegeben. Der String muß dabei den allgemeinen Aufbau 'YYYY-MM-DD HH:MM:SS.FFFFFF' haben, bzw. abhängig vom jeweiligen Typ entsprechend weniger Felder. Der Datumsbereich kann auch im durch die NLS Datei bzw. die Shellvariable YARDDATE bestimmten Format angegeben werden.
datetime-literal ::=
{ DATE | TIME | TIMESTAMP } string-literal
interval-literal ::=
INTERVAL [ + | - ] string-literal interval-qualifier
interval-qualifier ::=
DAY [ interval-precision ]
| DAY [ interval-precision ] TO HOUR
| DAY [ interval-precision ] TO MINUTE
| DAY [ interval-precision ] TO SECOND [ second-precision ]
| HOUR [ interval-precision ]
| HOUR [ interval-precision ] TO MINUTE
| HOUR [ interval-precision ] TO SECOND [ second-precision ]
| MINUTE [ interval-precision ]
| MINUTE [ interval-precision ] TO SECOND [ second-precision ]
| SECOND [ ( unsigned-integer-literal ] [ , unsigned-integer-literal ] ) ]
| YEAR [ interval-precision ]
| MONTH [ interval-precision ]
| YEAR [ interval-precision ] TO MONTH
interval-precision ::=
( unsigned-integer-literal )
second-precision ::=
( unsigned-integer-literal )
Variablen, Werte und dynamische Parameter
Hostvariablen (host-variable-construct) können nur in einem
ESQLC-Programm verwendet werden. Prozedurvariablen (variable-name)
können nur in SQL- und PL-Anweisungen innerhalb von Routinen verwendet
werden. Dynamische Parameter können auch in der Procedure Language (PL)
verwendet werden.
Hostvariablen
host-variable-construct ::=
host-variable [ indicator-variable ]
host-variable ::= : host-identifier
indicator-variable ::= { : host-identifier | INDICATOR host-identifier }
host-identifier ::= gültiger C Identifier mit der Maximallänge 100
Ein host-identifier muß in einer DECLARE SECTION deklariert werden
und kann die folgenden C und ESQLC Datentypen haben.
C Datentypen:
char-variable ::= { Hostvariable vom C Typ char
| Hostvariable vom ESQLC Typ varchar, string oder fixchar }
integer-variable ::= Hostvariable vom C Typ short, int oder long
float-variable ::= Hostvariable vom C Typ float oder double
decimal-variable ::= Hostvariable vom ESQLC Typ struct decimal bzw. decimal_t
blob-variable ::= Hostvariable vom ESQLC Typ struct blob bzw. blob_t oder BLOB
Prozedurvariablen
variable-name ::= identifier char-variable ::= Variable vom SQL Typ CHAR oder VARCHAR integer-variable ::= Variable vom SQL Typ INTEGER oder SMALLINT float-variable ::= Variable vom SQL Typ FLOAT oder REAL decimal-variable ::= Variable vom SQL Typ DECIMAL oder MONEY
Werte
char-value ::= { char-variable | string-literal }
integer-value ::= { integer-variable | integer-literal }
float-value ::= { float-variable | floating-literal }
decimal-value ::= { decimal-variable | floating-literal }
Dynamische Parameter
Dynamische Parameter sind Platzhalter für Werte in dynamisch definierten
SQL-Anweisungen (PREPARE), wobei die eigentlichen Werte beim OPEN oder
EXECUTE übergeben werden. Dynamische Parameter können somit nur in einer
PREPARE Anweisung verwendet werden.
dynamic-parameter ::= ?
Identifier
Ein Identifier darf, soweit nicht explizit anders angegeben,
maximal 18 Zeichen lang sein.
identifier ::= { regular-identifier | delimited-identifier }
regular-identifier ::= { a-zA-Z }[ _a-zA-Z0-9 ]...
delimited-identifier ::= "ASCII 8 Bit Zeichen [ ... ]"
Wird die Shellvariable YARDSTRING gesetzt, können keine Delimited
Identifier verwendet werden. Doppelte Anführungszeichen dienen dann
der Kennzeichnung von Stringkonstanten. Ein doppeltes Anführungszeichen
muß durch ein weiteres doppeltes Anführungszeichen ausmaskiert werden.
Das Zeichen ASCII 0 kann nicht verwendet werden.
qualified-name ::= [ schema-name. ] identifier
schema-name ::= { string-literal | regular-identifier }
synonym-name ::= qualified-name
table-name ::= qualified-name
trigger-name ::= qualified-name
routine-name ::= qualified-name
constraint-name ::= qualified-name
domain-name ::= qualified-name
index-name ::= qualified-name
savepoint-name ::= qualified-name
routine-source ::= { char-value | blob-variable }
column-name ::= identifier
column-name-list ::= column-name [ , ... ]
correlation-name ::= identifier
cursor-name ::= { identifier | char-variable }
database-name ::= { identifier | char-value }
Ein database-name darf maximal 10 Zeichen lang sein.
filename ::= char-value
descriptor-name ::= char-value
statement-id ::= { identifier | char-variable }
user-name ::= { identifier | char-value }
Ein user-name darf maximal 14 Zeichen lang sein. Bei der Verwendung
von user-name in einer CONNECT Anweisung gilt die Besonderheit, daß
führende und abschließende Leerzeichen entfernt werden.
password ::= char-value user-authorization-identifier ::= identifier dbspace-name ::= regular-identifier
Ein dbspace-name darf maximal 10 Zeichen lang sein.
SQL-Datentypen
Die von YARD-SQL unterstützen Datentypen können in den folgenden
SQL-Anweisungen verwendet werden:
data-type ::= CHAR [ (n) ] | CHARACTER [ (n) ] | VARCHAR [ (n) ] | SMALLINT | INTEGER | INT | SERIAL [ (s) ]SQL | SMALLFLOAT | REAL | FLOAT | DOUBLE PRECISION | DECIMAL [ ( m , [ n ] ) ] | DEC [ ( m , [ n ] ) ] | NUMERIC [ ( m , [ n ] ) ] | MONEY [ ( m , [ n ] ) ] | DATE | TIME [ ( m ) ] | TIMESTAMP [ ( m ) ] | INTERVAL interval-qualifier | BLOBSQL | TEXTSQL
Unabhängig von der Einstellung des Datumsformat kann immer die ANSI Schreibweise YYYY-MM-DD verwendet werden. Die Angabe des Jahres muß dabei immer vierstellig erfolgen.
create table dt ( col10 date, col11 time, col12 timestamp(0), col13 time(2), col14 timestamp(4), col15 time, col16 timestamp );
create table ival ( col20 interval day, col21 interval day to hour, col22 interval day to minute, col23 interval day to second(0), col24 interval day to second(2), col25 interval hour, col26 interval hour(3) to minute, col27 interval hour to second(0), col28 interval hour to second(2), col29 interval minute, col30 interval minute(4) to second(0), col31 interval minute to second, col32 interval month, col33 interval second(2,0), col34 interval second(2,2), col35 interval year(1), col36 interval year to month, col37 interval second );
Search Conditions
Zum Thema Search Conditions siehe auch Kapitel 3, Abschnitt Search Conditions.
search-condition ::=
boolean-term [ OR search-condition ]
boolean-term ::= boolean-factor [ AND boolean-term ]
boolean-factor ::= [ NOT ] boolean-primary
boolean-primary ::= predicate | ( search-condition )
predicate ::=
comparison-predicate
| between-predicate
| in-predicate
| like-predicate
| null-predicate
| quantified-comparison-predicateSQL
| exists-predicateSQL
| matches-predicate
comparison-predicate ::= value-expression comparison-operator value-expression
between-predicate ::= value-expression [ NOT ] BETWEEN value-expression AND value-expression
in-predicate ::= value-expression [ NOT ] IN { ( unsigned-value-specification [ , ... ] )
| ( query-expression ) }
like-predicate ::= value-expression [ NOT ] LIKE value-expression [ escape-clauseSQL ]
null-predicate ::= column-reference IS [ NOT ] NULL
quantified-comparison-predicate ::=
value-expression comparison-operator { ALL | ANY | SOME } ( query-expression )
exists-predicate ::= EXISTS (query-expression)
matches-predicate ::= value-expression [ NOT ] MATCHES value-expression [ escape-clauseSQL ]
escape-clause ::= ESCAPE value-expression
comparison-operator ::= { = | != | <> | < | > | >= | <= }
Expressions
Zum Thema Expressions siehe auch Kapitel 3, Abschnitt Expressions.
value-expression ::=
value-expression { + | - | * | / | DIV | MOD | concat-operator } value-expression
| [ + | - ] value-expression
| value-expression-primary
concat-operator ::= ||
value-expression-primary ::=
column-referenceSQL [ subscript ]SQL
| rowid-primarySQL
| subquerySQL
| set-function-specificationSQL
| unsigned-value-specification
| routine-invocation
| numeric-value-function ( [ value-expression [ , ... ] ] )
| string-value-function ( [ value-expression [ , ... ] ] )
| date-value-function ( [ value-expression [ , ... ] ] )
| ( value-expression )
| NVL ( value-expression , value-expression )
| EXTRACT ( { YEAR | MONTH | DAY | HOUR | MINUTE | SECOND }
FROM value-expression )
| cast-specification
| SERIAL ( table-name )
column-reference ::= [ { table-name | correlation-name } . ] column-name
subscript ::= [ unsigned-integer-literal [ , unsigned-integer-literal ] ]
Beim subscript sind die äußeren eckigen Klammern Bestandteil der Syntax.
rowid-primary ::= [ { table-name | correlation-name } . ] ROWID
subquery ::= ( query-expression )
set-function-specification ::=
COUNT ( * )
| set-type ( [ set-quantifier ] value-expression )
set-type ::=
{ AVG | COUNT | MAX | MIN | SUM }
set-quantifier ::=
ALL | DISTINCT
unsigned-value-specification ::=
dynamic-parameter
| host-variable-constructSQL
| variable-namePL
| literal
| TODAY
| CURRENT_DATE
| CURRENT_TIME
| CURRENT_TIMESTAMP
| SYSTEM USER
| USER
| SQLCODEPL
| ISAMCODEPL
| SQLERRMPL
| SQLERRIPL
| SQLSERIALPL
| SQLROWCNTPL
| SQLOPCODEPL
routine-invocation ::= routine-name ( [ value-expression [ , ... ] ] )
numeric-value-function ::=
ABS
| ABSOLUTE
| ACOS
| ASIN
| ATAN
| COS
| COSH
| EXP
| LOG
| LOG10
| MOD
| POW
| POWER
| RAND
| ROUND
| SIN
| SINH
| SQRT
| TAN
| TANH
| TRUNC
string-value-function ::=
ASCII
| CHAR
| CHAR_LENGTH
| CHARACTER_LENGTH
| CHR
| CONCAT
| HEX
| INSTR
| LENGTH
| LCASE
| LOWER
| LPAD
| LTRIM
| POSITION
| REPLACE
| RPAD
| RTRIM
| SUBSTR
| SUBSTRING
| UCASE
| UPPER
date-value-function ::=
CURDATE
| DAY
| DAYOFMONTH
| DAYOFWEEK
| MONTH
| WEEKDAY
| YEAR
cast-specification ::=
CAST ( { value-expression | NULL } AS data-type )
Funktionen und Prozeduren
In diesem Abschnitt werden die syntaktischen Elemente von Funktionen und
Prozeduren aufgeführt, die in der CREATE FUNCTION bzw. CREATE PROCEDURE
Anweisung verwendet werden. Zum Thema Prozeduren und Funktionen siehe
insbesondere die Kapitel 5, Stored Procedures, und Kapitel 6,
Procedure Language Reference.
parameter-declaration ::=
identifier data-type [ default-specification ]
default-specification ::=
{ DEFAULT | = } default-value
default-value ::=
literal
| NULL
| SYSTEM USER
| USER
| TODAY
routine-body ::=
[ local-declaration-list ; ]
{ procedure-statement | external-body-reference }
external-body-reference ::=
EXTERNAL string-literal
local-declaration-list ::= local-declaration [ ... ]
local-declaration ::=
variable-declaration ;
| exception-declaration ;
| handler-declaration ;
| handler-routine-declaration
procedure-statement ::= { terminated-statement ; | statement }
terminated-statement ::=
assignment-statement
| break-statement
| call-statement
| continue-statement
| return-statement
| signal-statement
| sql-statement
| write-statement
statement ::=
compound-statement
| case-statement
| if-statement
| while-statement
| for-statement
| foreach-statement
compound-statement ::=
BEGIN
[ local-declaration-list ]
[ statement-list ]
END
statement-list ::= procedure-statement [ ... ]
Die o.a. Anweisungen unter local-declaration sowie terminated-statement
(außer sql-statement) und statement sind in Kapitel 6, Procedure Language
Referenz, definiert.
sql-statement ::=Die folgenden Anweisungen dürfen in jeder Routine vorkommen:
ALTER USER | CALL | CHECK TABLE | CLOSE | CREATE DOMAIN | CREATE INDEX | CREATE SYNONYM | CREATE TABLE | CREATE USER | CREATE VIEW | DECLARE CURSOR | DELETE | EXECUTE | EXECUTE IMMEDIATE | FETCH | FREE | INSERT | LOCK | OPEN | PREPARE | SELECT | SET LOCK MODE | SET ISOLATION | SET OPTIMIZER | UNLOCK | UPDATEIn Routinen, die nicht von einem Trigger ausgelöst werden, können zusätzlich die folgenden SQL-Anweisungen verwendet werden:
ALTER TABLE | COMMIT | CREATE TRIGGER | DROP DOMAIN | DROP INDEX | DROP SYNONYM | DROP TABLE | DROP USER | DROP VIEW | DROP TRIGGER | GRANT | RELEASE | RENAME | REVOKE | ROLLBACK | SAVEPOINT | UPDATE STATISTICS