BNF Grammar for ISO/IEC 9075-2:2003 - Database Language SQL (SQL-2003) SQL/Foundation ===================================================================================== @(#)$Id: sql-2003-2.bnf,v 1.11 2005/07/13 18:37:30 jleffler Exp $ --p Information taken from the Final Committee Draft (FCD) of ISO/IEC 9075-2:2003. However, the page numbers and some section titles (9.14 through 9.23, for example) are from the final standard. This means there could be other as yet undiagnosed differences between the final standard and the notation in this document; you were warned! --/p --p The plain text version of this grammar is --## sql-2003-2.bnf . --/p --hr --h2 Key SQL Statements and Fragments --/h2 --bl --li ALTER DOMAIN --li ALTER TABLE --li CLOSE cursor --li Column definition --li COMMIT WORK --li CONNECT --li CREATE ASSERTION --li CREATE CHARACTER SET --li CREATE COLLATION --li CREATE DOMAIN --li CREATE FUNCTION --li CREATE PROCEDURE --li CREATE SCHEMA --li CREATE TABLE --li CREATE TRANSLATION --li CREATE TRIGGER --li CREATE VIEW --li Data type --li DEALLOCATE PREPARE --li DECLARE cursor --li DECLARE LOCAL TEMPORARY TABLE --li DELETE --li DESCRIBE --li DESCRIPTOR statements --li DISCONNECT --li EXECUTE --li EXECUTE IMMEDIATE --li FETCH cursor --li FROM clause --li GET DIAGNOSTICS --li GRANT --li GROUP BY clause --li HAVING clause --li INSERT --li Literals --li Keywords --li MERGE --li OPEN cursor --li ORDER BY clause --li PREPARE --li REVOKE --li ROLLBACK WORK --li SAVEPOINT --li Search condition --li SELECT --li SET CATALOG --li SET CONNECTION --li SET CONSTRAINTS --li SET NAMES --li SET SCHEMA --li SET SESSION AUTHORIZATION --li SET TIME ZONE --li SET TRANSACTION --li SQL Client MODULE --li UPDATE --li Value expression --li WHERE clause --/bl --hr --h2 5 Lexical Elements --/h2 --p Basic definitions of characters used, tokens, symbols, etc. Most of this section would normally be handled within the lexical analyzer rather than in the grammar proper. Further, the original document does not quote the various single characters, which makes it hard to process automatically. --/p --h3 5.1 (p151) --/h3 ::= ::= | | ::= | ::= A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z ::= a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ::= | | | | | | | | | | | | | | | | | | | | | | | | | ::= !! See the Syntax Rules ::= " ::= % ::= & ::= ' ::= ( ::= ) ::= * ::= + ::= , ::= - ::= . ::= / ::= : ::= ; ::= < ::= = ::= > ::= ? --p --i The trigraphs are new in SQL-2003. --/i --/p ::= | ::= | ::= [ ::= ??( ::= ] ::= ??) ::= ^ ::= _ ::= | ::= { ::= } --hr --h3 5.2 and (p134) --/h3 --p Specifying lexical units (tokens and separators) that participate in SQL language. --/p ::= | ::= | | | | | | | ::= ::= [ ... ] ::= | --p --i --small Previous standard said: --br ::= | --/small --/i --/p ::= !! See the Syntax Rules ::= !! See the Syntax Rules ::= ... ::= K | M | G --p --i --small The productions for and so on are new in SQL-2003. --/small --/i --/p ::= U ... [ ESCAPE ] ::= ... ::= | ::= | ::= ::= ::= !! See the Syntax Rules ::= !! See the Syntax Rules --p --i --small The rule for in the standard uses two adjacent literal double quotes rather than referencing ; the reasons are not clear. It is annotated '!! two consecutive double quote characters'. --/small --/i --/p ::= ::= | |
::= ::= ::= [ ] ::= ::= [ ] ::= [ ] ::= | MODULE ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= [ ] ::= MODULE ::= ::= ::= ::= | ::= ::= ::= [ ] ::= ::= ::= ::= ::= [ ] ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= | ::= ::= [ ] ::= | ::= [ ] ::= [ ] ::= GLOBAL | LOCAL ::= --hr --h2 6 Scalar expressions --/h2 --h3 6.1 (p161) --/h3 ::= | | | | ::= [ CHARACTER SET ] [ ] | [ ] | | | | | ::= CHARACTER [ ] | CHAR [ ] | CHARACTER VARYING | CHAR VARYING | VARCHAR | CHARACTER LARGE OBJECT [ ] | CHAR LARGE OBJECT [ ] | CLOB [ ] ::= NATIONAL CHARACTER [ ] | NATIONAL CHAR [ ] | NCHAR [ ] | NATIONAL CHARACTER VARYING | NATIONAL CHAR VARYING | NCHAR VARYING | NATIONAL CHARACTER LARGE OBJECT [ ] | NCHAR LARGE OBJECT [ ] | NCLOB [ ] ::= BINARY LARGE OBJECT [ ] | BLOB [ ] ::= | ::= NUMERIC [ [ ] ] | DECIMAL [ [ ] ] | DEC [ [ ] ] | SMALLINT | INTEGER | INT | BIGINT ::= FLOAT [ ] | REAL | DOUBLE PRECISION ::= ::= [ ] [ ] | [ ] ::= CHARACTERS | CODE_UNITS | OCTETS ::= ::= ::= BOOLEAN ::= DATE | TIME [
::= ::= ::= ::= | ::= ARRAY [ ] ::= MULTISET --hr --h3 6.2 (p173) --/h3 ::= [ ] --hr --h3 6.3 (p174) --/h3 ::= | ::= ::= | | | | | | | | | | | | | | | | | | --hr --h3 6.4 and (p176) --/h3 ::= | ::= | ::= | | | | | CURRENT_DEFAULT_TRANSFORM_GROUP | CURRENT_PATH | CURRENT_ROLE | CURRENT_TRANSFORM_GROUP_FOR_TYPE | CURRENT_USER | SESSION_USER | SYSTEM_USER | USER | VALUE ::= | | | ::= | | | | | ::= | | | ::= [ ] ::= ::= [ ] ::= [ INDICATOR ] ::= [ INDICATOR ] ::= ::= | ::= CURRENT_COLLATION --hr --h3 6.5 (p181) --/h3 ::= | ::= | ::= NULL ::= ARRAY | MULTISET ::= DEFAULT --hr --h3 6.6 (p183) --/h3 ::= [ { }... ] ::= --hr --h3 6.7 (p187) --/h3 ::= | MODULE --hr --h3 6.8 (p190) --/h3 ::= --hr --h3 6.9 (p191) --/h3 ::= | ::= GROUPING [ { }... ] --hr --h3 6.10 (p193) --/h3 ::= OVER ::= | ROW_NUMBER | ::= RANK | DENSE_RANK | PERCENT_RANK | CUME_DIST ::= | ::= --hr --h3 6.11 (p197) --/h3 ::= | ::= NULLIF | COALESCE { }... ::= | ::= CASE ... [ ] END ::= CASE ... [ ] END ::= WHEN THEN ::= WHEN THEN ::= ELSE ::= | ::= | | | | | | | | | | | | | | | ::= | NULL ::= --hr --h3 6.12 (p200) --/h3 ::= CAST AS ::= | ::= | --hr --h3 6.13 (p216) --/h3 ::= NEXT VALUE FOR --hr --h3 6.14 (p218) --/h3 ::= --hr --h3 6.15 (p219) --/h3 ::= TREAT AS ::= ::= | --hr --h3 6.16 (p221) --/h3 ::= | ::= [ ] ::= AS [ ] ::= ::= --hr --h3 6.17 (p223) --/h3 ::= [ ] ::= --hr --h3 6.18 (p225) --/h3 ::= NEW ::= | --hr --h3 6.19 (p227) --/h3 ::= [ ] ::= --hr --h3 6.20 (p229) --/h3 ::= --hr --h3 6.21 (p230) --/h3 ::= --hr --h3 6.22 (p232) --/h3 ::= DEREF --hr --h3 6.23 (p234) --/h3 ::= --hr --h3 6.24 (p235) --/h3 ::= ELEMENT --h3 6.25 (p236) --/h3 --p Specify a value. --/p ::= | | ::= | | | | | | ::= ::= ::= | ::= | --h3 6.26 (p240) --/h3 --p Specify a numeric value. --/p ::= | | ::= | | ::= [ ] ::= | --h3 6.27 (p242) --/h3 --p Specify a function yielding a value of type numeric. --/p ::= | | | | | | | | | | | | ::= | ::= POSITION IN [ USING ] ::= POSITION IN ::= | ::= { CHAR_LENGTH | CHARACTER_LENGTH } [ USING ] ::= OCTET_LENGTH ::= EXTRACT FROM ::= |
::= MULTISET ::= [ { } ] ::= ::= MULTISET
::= TABLE --hr --h2 7 Query expressions --/h2 --h3 7.1 (p293) --/h3 Specify a value or list of values to be constructed into a row or partial row. ::= | | ::= | ROW | ::= [ { }... ] ::= ::= | | | | ROW ::= [ { }... ] ::= | ::= | | --h3 7.2 (p296) --/h3 --p Specify a row value. --/p ::= |
::= | ::= | ::= | ::= --h3 7.3
(p298) --/h3 --p Specify a set of s to be constructed into a table. --/p
::= VALUES ::=
[ {
}... ] ::= VALUES ::= [ { }... ] --h3 7.4
(p300) --/h3 --p Specify a table or a grouped table. --/p
::= [ ] [ ] [ ] [ ] --h3 7.5 (p301) --/h3 --p Specify a table derived from one or more tables. --/p ::= FROM
::=
[ {
}... ] --h3 7.6
(p303) --/h3 --p Reference a table. --/p
::=
[ ]
::=
| ::= TABLESAMPLE [ ] ::= BERNOULLI | SYSTEM ::= REPEATABLE ::= ::=
::=
[ [ AS ] [ ] ] | [ AS ] [ ] | [ AS ] [ ] | [ AS ] [ ] |
[ AS ] [ ] | [ [ AS ] [ ] ] | ::= ONLY
::= LATERAL
::= UNNEST [ WITH ORDINALITY ]
::= TABLE ::=
::=
| ::= ::= [ { }... ] --h3 7.7 (p312) --/h3 --p Specify a table derived from a Cartesian product, inner or outer join, or union join. --/p ::= | | | ::=
CROSS JOIN
::=
[ ] JOIN
::=
NATURAL [ ] JOIN
::=
UNION JOIN
::= | ::= ON ::= USING ::= INNER | [ OUTER ] ::= LEFT | RIGHT | FULL ::= --h3 7.8 (p319) --/h3 --p Specify a table derived by the application of a to the result of the preceding . --/p ::= WHERE --h3 7.9 (p320) --/h3 --p Specify a grouped table derived by the application of the to the result of the previously specified clause. --/p ::= GROUP BY [ ] ::= [ { }... ] ::= | | | | ::= | ::= [ ] ::= [ { }... ] ::= ROLLUP ::= [ { }... ] ::= CUBE ::= GROUPING SETS ::= [ { }... ] ::= | | | | ::= --h3 7.10 (p329) --/h3 --p Specify a grouped table derived by the elimination of groups that do not satisfy a . --/p ::= HAVING --h3 7.11 (p331) --/h3 --p Specify one or more window definitions. --/p ::= WINDOW ::= [ { }... ] ::= AS ::= ::= ::= [ ] [ ] [ ] [ ] ::= ::= PARTITION BY ::= [ { }... ] ::= [ ] ::= ORDER BY ::= [ ] ::= ROWS | RANGE ::= | ::= UNBOUNDED PRECEDING | | CURRENT ROW ::= PRECEDING ::= BETWEEN AND ::= ::= ::= | UNBOUNDED FOLLOWING | ::= FOLLOWING ::= EXCLUDE CURRENT ROW | EXCLUDE GROUP | EXCLUDE TIES | EXCLUDE NO OTHERS --h3 7.12 (p341) --/h3 --p Specify a table derived from the result of a
. --/p ::= SELECT [ ]
[ { ::= | ::= | ::= [ { }... ] ::= ::= [ ] ::= [ AS ] ::= [ AS ] ::= --h3 7.13 (p350) --/h3 --p Specify a table. --/p ::= [ ] ::= WITH [ RECURSIVE ] ::= [ { }... ] ::= [ ] AS [ ] ::= ::= | ::= | UNION [ ALL | DISTINCT ] [ ] | EXCEPT [ ALL | DISTINCT ] [ ] ::= | ::= | INTERSECT [ ALL | DISTINCT ] [ ] ::= | ::= | ::= |
| ::= TABLE
::= CORRESPONDING [ BY ] ::= --h3 7.14 (p363) --/h3 --p Specify the generation of ordering and cycle detection information in the result of recursive query expressions. --/p ::= | | ::= SEARCH SET ::= DEPTH FIRST BY | BREADTH FIRST BY ::= ::= CYCLE SET TO DEFAULT USING ::= [ { }... ] ::= ::= ::= ::= ::= --h3 7.15 (p368) --/h3 --p Specify a scalar value, a row, or a table derived from a . --/p ::= ::=
::= ::= --hr --h2 8 Predicates --/h2 --h3 8.1 (p371) --/h3 --p Specify a condition that can be evaluated to give a boolean value. --/p ::= | | | | | | | | | | | | | | | | --h3 8.2 (p373) --/h3 --p Specify a comparison of two row values. --/p ::= ::= ::= | | | | | --h3 8.3 (p380) --/h3 --p Specify a range comparison. --/p ::= ::= [ NOT ] BETWEEN [ ASYMMETRIC | SYMMETRIC ] AND --h3 8.4 (p381) --/h3 --p Specify a quantified comparison. --/p ::= ::= [ NOT ] IN ::=
| ::= [ { }... ] --h3 8.5 (p383) --/h3 --p Specify a pattern-match comparison. --/p ::= | ::= ::= [ NOT ] LIKE [ ESCAPE ] ::= ::= ::= ::= [ NOT ] LIKE [ ESCAPE ] ::= ::= --h3 8.6 (p389) --/h3 --p Specify a character string similarity by means of a regular expression. --/p ::= ::= [ NOT ] SIMILAR TO [ ESCAPE ] ::= ::= | ::= | ::= | | | | ::= [ ] ::= [ ] ::= ::= ::= | | | ::= | ::= !! See the Syntax Rules ::= !! See the Syntax Rules ::= | ... | ... | ... ... ::= ::= ::= | | ::= --h3 8.7 (p395) --/h3 --p Specify a test for a null value. --/p ::= ::= IS [ NOT ] NULL --h3 8.8 (p397) --/h3 --p Specify a quantified comparison. --/p ::= ::=
::= | ::= ALL ::= SOME | ANY --h3 8.9 (p399) --/h3 --p Specify a test for a non-empty set. --/p ::= EXISTS
--h3 8.10 (p400) --/h3 --p Specify a test for the absence of duplicate rows --/p ::= UNIQUE
--h3 8.11 (p401) --/h3 --p Determine whether a character string value is normalized. --/p ::= IS [ NOT ] NORMALIZED --h3 8.12 (p402) --/h3 --p Specify a test for matching rows. --/p ::= ::= MATCH [ UNIQUE ] [ SIMPLE | PARTIAL | FULL ]
--h3 8.13 (p405) --/h3 --p Specify a test for an overlap between two datetime periods. --/p ::= ::= ::= OVERLAPS ::= ::= --h3 8.14 (p407) --/h3 --p Specify a test of whether two row values are distinct --/p ::= ::= IS DISTINCT FROM ::= ::= --h3 8.15 (p409) --/h3 --p Specify a test of whether a value is a member of a multiset. --/p ::= ::= [ NOT ] MEMBER [ OF ] --h3 8.16 (p411) --/h3 --p Specify a test of whether a multiset is a submultiset of another multiset. --/p ::= ::= [ NOT ] SUBMULTISET [ OF ] --h3 8.17 (p413) --/h3 --p Specify a test of whether a multiset is a set (that is, does not contain any duplicates). --/p ::= ::= IS [ NOT ] A SET --h3 8.18 (p414) --/h3 --p Specify a type test. --/p ::= ::= IS [ NOT ] OF ::= [ { }... ] ::= | ::= ::= ONLY --h3 8.19 (p416) --/h3 --p Specify a condition that is True , False , or Unknown , depending on the value of a . --/p ::= --hr --h2 9 Additional common rules --/h2 --h3 9.1 Retrieval assignment (p417) --/h3 --h3 9.2 Store assignment (p422) --/h3 --h3 9.3 Data types of results of aggregations (p427) --/h3 --h3 9.4 Subject routine determination (p430) --/h3 --h3 9.5 Type precedence list determination (p431) --/h3 --h3 9.6 Host parameter mode determination (p434) --/h3 --h3 9.7 Type name determination (p436) --/h3 --h3 9.8 Determination of identical values (p438) --/h3 --h3 9.9 Equality operations (p440) --/h3 --h3 9.10 Grouping operations (p443) --/h3 --h3 9.11 Multiset element grouping operations (p445) --/h3 --h3 9.12 Ordering operations (p447) --/h3 --h3 9.13 Collation determination (p449) --/h3 --h3 9.14 Execution of array-returning functions (p450) --/h3 --h3 9.15 Execution of multiset-returning functions (p453) --/h3 --h3 9.16 Data type identity (p454) --/h3 --h3 9.17 Determination of a from-sql function (p456) --/h3 --h3 9.18 Determination of a from-sql function for an overriding method (p457) --/h3 --h3 9.19 Determination of a to-sql function (p458) --/h3 --h3 9.20 Determination of a to-sql function for an overriding method (p459) --/h3 --h3 9.21 Generation of the next value of a sequence generator (p460) --/h3 --h3 9.22 Creation of a sequence generator (p461) --/h3 --h3 9.23 Altering a sequence generator (p463) --/h3 --hr --h2 10 Additional common elements --/h2 --h3 10.1 (p465) --/h3 --p Specify the precision of an interval data type. --/p ::= TO | ::= [ ] ::= | SECOND [ ] ::= [ ] | SECOND [ [ ] ] ::= | SECOND ::= YEAR | MONTH | DAY | HOUR | MINUTE ::= ::= --h3 10.2 (p469) --/h3 --p Specify a standard programming language. --/p ::= LANGUAGE ::= ADA | C | COBOL | FORTRAN | MUMPS | PASCAL | PLI | SQL --p Table 14 -- Standard programming languages --/p --##
--## --## --## --## --## --## --## --## --## --##
Language keyword Relevant standard
ADAISO/IEC 8652
CISO/IEC 9899
COBOLISO 1989
FORTRANISO 1539
MUMPSISO/IEC 11756
PASCALISO/IEC 7185 and ISO/IEC 10206
PLIISO 6160
SQLISO/IEC 9075
--h3 10.3 (p471) --/h3 --p Specify an order for searching for an SQL-invoked routine. --/p ::= PATH ::= [ { }... ] --h3 10.4 (p472) --/h3 --p Invoke an SQL-invoked routine. --/p ::= ::= [ ] ::= [ [ { }... ] ] ::= | | ::= AS --h3 10.5 (p495) --/h3 --p Identify a character set. --/p ::= | | ::= ::= ::= --h3 10.6 (p497) --/h3 --p Specify an SQL-invoked routine. --/p ::= SPECIFIC | [ FOR ] ::= ROUTINE | FUNCTION | PROCEDURE | [ INSTANCE | STATIC | CONSTRUCTOR ] METHOD ::= [ ] ::= | ::= [ [ { }... ] ] --h3 10.7 (p500) --/h3 --p Specify a default collating sequence. --/p ::= COLLATE --h3 10.8 and (p501) --/h3 --p Specify the name of a constraint and its characteristics. --/p ::= CONSTRAINT ::= [ [ NOT ] DEFERRABLE ] | [ NOT ] DEFERRABLE [ ] ::= INITIALLY DEFERRED | INITIALLY IMMEDIATE --h3 10.9 (p503) --/h3 --p Specify a value computed from a collection of rows. --/p ::= COUNT [ ] | [ ] | [ ] | [ ] ::= [ ] ::= ::= AVG | MAX | MIN | SUM | EVERY | ANY | SOME | COUNT | STDDEV_POP | STDDEV_SAMP | VAR_SAMP | VAR_POP | COLLECT | FUSION | INTERSECTION ::= DISTINCT | ALL ::= FILTER WHERE ::= ::= COVAR_POP | COVAR_SAMP | CORR | REGR_SLOPE | REGR_INTERCEPT | REGR_COUNT | REGR_R2 | REGR_AVGX | REGR_AVGY | REGR_SXX | REGR_SYY | REGR_SXY ::= ::= ::= | ::= ::= WITHIN GROUP ORDER BY ::= [ { }... ] ::= ::= ::= PERCENTILE_CONT | PERCENTILE_DISC --h3 10.10 (p515) --/h3 --p Specify a sort order. --/p ::= [ { }... ] ::= [ ] [ ] ::= ::= ASC | DESC ::= NULLS FIRST | NULLS LAST --hr --h2 11 Schema definition and manipulation --/h2 --h3 11.1 (p517) --/h3 --p Define a schema. --/p ::= CREATE SCHEMA [ ] [ ... ] ::= | | | ::= | AUTHORIZATION | AUTHORIZATION ::= ::= DEFAULT CHARACTER SET ::= ::= | | | | | | | | | | | | | | | --h3 11.2 (p520) --/h3 --p Destroy a schema. --/p ::= DROP SCHEMA ::= CASCADE | RESTRICT --h3 11.3
(p523) --/h3 --p Define a persistent base table, a created local temporary table, or a global temporary table. --/p
::= CREATE [
] TABLE
[ ON COMMIT
ROWS ]
::=
| OF [ ] [
] |
::= TEMPORARY ::= GLOBAL | LOCAL
::= PRESERVE | DELETE
::=
[ {
}... ]
::= |
| | | ::= REF IS ::= SYSTEM GENERATED | USER GENERATED | DERIVED ::= ::= WITH OPTIONS ::= [ ] [ ] [ ... ] ::= UNDER ::= ::=
::= LIKE
[ ] ::= | ::= INCLUDING IDENTITY | EXCLUDING IDENTITY ::= INCLUDING DEFAULTS | EXCLUDING DEFAULTS ::= [ ] AS ::= WITH NO DATA | WITH DATA --h3 11.4 (p534) --/h3 --p Define a column of a base table. --/p ::= [ | ] [ ] [ | | ] [ ... ] [ ] ::= [ ] [ ] ::= NOT NULL | | | ::= REFERENCES ARE [ NOT ] CHECKED [ ON DELETE ] ::= ::= GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ] ::= AS ::= GENERATED ALWAYS ::= --h3 11.5 (p539) --/h3 --p Specify the default for a column, domain, or attribute. --/p ::= DEFAULT ::= | | USER | CURRENT_USER | CURRENT_ROLE | SESSION_USER | SYSTEM_USER | CURRENT_PATH | --h3 11.6
(p543) --/h3 --p Specify an integrity constraint. --/p
::= [ ]
[ ]
::= | | --h3 11.7 (p545) --/h3 --p Specify a uniqueness constraint for a table. --/p ::= | UNIQUE ( VALUE ) ::= UNIQUE | PRIMARY KEY ::= --h3 11.8 (p547) --/h3 --p Specify a referential constraint. --/p ::= FOREIGN KEY ::= REFERENCES [ MATCH ] [ ] ::= FULL | PARTIAL | SIMPLE ::= ::=
[ ] ::= ::= [ ] | [ ] ::= ON UPDATE ::= ON DELETE ::= CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION --h3 11.9 (p567) --/h3 --p Specify a condition for the SQL-data. --/p ::= CHECK --h3 11.10 (p569) --/h3 --p Change the definition of a table. --/p ::= ALTER TABLE
::= | | | | --h3 11.11 (p570) --/h3 --p Add a column to a table. --/p ::= ADD [ COLUMN ] --h3 11.12 (p572) --/h3 --p Change a column and its definition. --/p ::= ALTER [ COLUMN ] ::= | | | | --h3 11.13 (p573) --/h3 --p Set the default clause for a column. --/p ::= SET --h3 11.14 (p574) --/h3 --p Drop the default clause from a column. --/p ::= DROP DEFAULT --h3 11.15 (p575) --/h3 --p Add a non-empty scope for an existing column of data type REF in a base table. --/p ::= ADD --h3 11.16 (p576) --/h3 --p Drop the scope from an existing column of data type REF in a base table. --/p ::= DROP SCOPE --h3 11.17 (p578) --/h3 --p Change the options specified for an identity column. --/p ::= ... ::= | SET --h3 11.18 (p579) --/h3 --p Destroy a column of a base table. --/p ::= DROP [ COLUMN ] --h3 11.19 (p581) --/h3 --p Add a constraint to a table. --/p ::= ADD
--h3 11.20 (p582) --/h3 --p Destroy a constraint on a table. --/p ::= DROP CONSTRAINT --h3 11.21 (p585) --/h3 --p Destroy a table. --/p ::= DROP TABLE
--h3 11.22 (p588) --/h3 --p Define a viewed table. --/p ::= CREATE [ RECURSIVE ] VIEW
AS [ WITH [ ] CHECK OPTION ] ::= | ::= [ ] ::= OF [ ] [ ] ::= UNDER
::= [ { }... ] ::= | ::= WITH OPTIONS ::= CASCADED | LOCAL ::= --h3 11.23 (p598) --/h3 --p Destroy a view. --/p ::= DROP VIEW
--h3 11.24 (p601) --/h3 --p Define a domain. --/p ::= CREATE DOMAIN [ AS ] [ ] [ ... ] [ ] ::= [ ] [ ] --h3 11.25 (p603) --/h3 --p Change a domain and its definition. --/p ::= ALTER DOMAIN ::= | | | --h3 11.26 (p604) --/h3 --p Set the default value in a domain. --/p ::= SET --h3 11.27 (p605) --/h3 --p Remove the default clause of a domain. --/p ::= DROP DEFAULT --h3 11.28 (p606) --/h3 --p Add a constraint to a domain. --/p ::= ADD --h3 11.29 (p607) --/h3 --p Destroy a constraint on a domain. --/p ::= DROP CONSTRAINT --h3 11.30 (p608) --/h3 --p Destroy a domain. --/p ::= DROP DOMAIN --h3 11.31 (p610) --/h3 --p Define a character set. --/p ::= CREATE CHARACTER SET [ AS ] [ ] ::= GET --h3 11.32 (p612) --/h3 --p Destroy a character set. --/p ::= DROP CHARACTER SET --h3 11.33 (p614) --/h3 --p Define a collating sequence. --/p ::= CREATE COLLATION FOR FROM [ ] ::= ::= NO PAD | PAD SPACE --h3 11.34 (p616) --/h3 --p Destroy a collating sequence. --/p ::= DROP COLLATION --h3 11.35 (p618) --/h3 --p Define a character transliteration. --/p ::= CREATE TRANSLATION FOR TO FROM ::= ::= ::= | ::= ::= --h3 11.36 (p621) --/h3 --p Destroy a character transliteration. --/p ::= DROP TRANSLATION --h3 11.37 (p623) --/h3 --p Specify an integrity constraint. --/p ::= CREATE ASSERTION CHECK [ ] --h3 11.38 (p625) --/h3 --p Destroy an assertion. --/p ::= DROP ASSERTION --h3 11.39 (p627) --/h3 --p Define triggered SQL-statements. --/p ::= CREATE TRIGGER ON
[ REFERENCING ] ::= BEFORE | AFTER ::= INSERT | DELETE | UPDATE [ OF ] ::= ::= [ FOR EACH { ROW | STATEMENT } ] [ WHEN ] ::= | BEGIN ATOMIC { }... END ::= ... ::= OLD [ ROW ] [ AS ] | NEW [ ROW ] [ AS ] | OLD TABLE [ AS ] | NEW TABLE [ AS ] ::= ::= ::= ::= --h3 11.40 (p631) --/h3 --p Destroy a trigger. --/p ::= DROP TRIGGER --h3 11.41 (p632) --/h3 --p Define a user-defined type. --/p ::= CREATE TYPE ::= [ ] [ AS ] [ ] [ ] ::= [ ... ] ::= | | | | ::= UNDER ::= ::= | ::= [ { }... ] ::= ::= INSTANTIABLE | NOT INSTANTIABLE ::= FINAL | NOT FINAL ::= | | ::= REF USING ::= REF FROM ::= REF IS SYSTEM GENERATED ::= [ ] [ ] ::= CAST SOURCE AS REF WITH ::= ::= CAST REF AS SOURCE WITH ::= ::= [ { }...] ::= [ ] [ ] ::= CAST SOURCE AS DISTINCT WITH ::= ::= CAST DISTINCT AS SOURCE WITH ::= ::= [ { }... ] ::= | ::= [ SELF AS RESULT ] [ SELF AS LOCATOR ] [ ] ::= OVERRIDING ::= [ INSTANCE | STATIC | CONSTRUCTOR ] METHOD [ SPECIFIC ] ::= [ ] ::= ... ::= | | | | --h3 11.42 (p648) --/h3 --p Define an attribute of a structured type. --/p ::= [ ] [ ] [ ] ::= --h3 11.43 (p650) --/h3 --p Change the definition of a user-defined type. --/p ::= ALTER TYPE ::= | | | | --h3 11.44 (p651) --/h3 --p Add an attribute to a user-defined type. --/p ::= ADD ATTRIBUTE --h3 11.45 (p653) --/h3 --p Destroy an attribute of a user-defined type. --/p ::= DROP ATTRIBUTE RESTRICT --h3 11.46 (p655) --/h3 --p Add an original method specification to a user-defined type. --/p ::= ADD --h3 11.47 (p661) --/h3 --p Add an overriding method specification to a user-defined type. --/p ::= ADD --h3 11.48 (p666) --/h3 --p Remove a method specification from a user-defined type. --/p ::= DROP RESTRICT ::= [ INSTANCE | STATIC | CONSTRUCTOR ] METHOD --h3 11.49 (p670) --/h3 --p Destroy a user-defined type. --/p ::= DROP TYPE --h3 11.50 (p673) --/h3 --p Define an SQL-invoked routine. --/p ::= ::= | ::= CREATE ::= CREATE ::= PROCEDURE ::= { | } ::= [ [ { }... ] ] ::= [ ] [ ] [ RESULT ] ::= IN | OUT | INOUT ::= [ ] ::= AS LOCATOR ::= FUNCTION [ ] ::= SPECIFIC METHOD | [ INSTANCE | STATIC | CONSTRUCTOR ] METHOD [ ] FOR ::= [ ... ] ::= | | SPECIFIC | | | | | ::= NEW SAVEPOINT LEVEL | OLD SAVEPOINT LEVEL ::= DYNAMIC RESULT SETS ::= PARAMETER STYLE ::= STATIC DISPATCH ::= RETURNS ::= [ ] | ::= TABLE
::=
[ {
}... ]
::= ::= CAST FROM ::= [ ] ::= [ ] ::= | ::= [ ] ::= SQL SECURITY INVOKER | SQL SECURITY DEFINER ::= ::= EXTERNAL [ NAME ] [ ] [ ] [ ] ::= EXTERNAL SECURITY DEFINER | EXTERNAL SECURITY INVOKER | EXTERNAL SECURITY IMPLEMENTATION DEFINED ::= SQL | GENERAL ::= DETERMINISTIC | NOT DETERMINISTIC ::= NO SQL | CONTAINS SQL | READS SQL DATA | MODIFIES SQL DATA ::= RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ::= ::= TRANSFORM GROUP { | } ::= ::= [ { }... ] ::= FOR TYPE --h3 11.51 (p698) --/h3 --p Alter a characteristic of an SQL-invoked routine. --/p ::= ALTER ::= ... ::= | | | | | NAME ::= RESTRICT --h3 11.52 (p701) --/h3 --p Destroy an SQL-invoked routine. --/p ::= DROP --h3 11.53 (p703) --/h3 --p Define a user-defined cast. --/p ::= CREATE CAST AS WITH [ AS ASSIGNMENT ] ::= ::= ::= --h3 11.54 (p705) --/h3 --p Destroy a user-defined cast. --/p ::= DROP CAST AS --h3 11.55 (p707) --/h3 --p Define a user-defined ordering for a user-defined type. --/p ::= CREATE ORDERING FOR ::= | ::= EQUALS ONLY BY ::= ORDER FULL BY ::= | | ::= RELATIVE WITH ::= MAP WITH ::= STATE [ ] ::= ::= --h3 11.56 (p710) --/h3 --p Destroy a user-defined ordering method. --/p ::= DROP ORDERING FOR --h3 11.57 (p712) --/h3 --p Define one or more transform functions for a user-defined type. --/p ::= CREATE { TRANSFORM | TRANSFORMS } FOR ... ::= ::= ::= [ ] ::= | ::= TO SQL WITH ::= FROM SQL WITH ::= ::= --h3 11.58 (p715) --/h3 --p Change the definition of one or more transform groups. --/p ::= ALTER {TRANSFORM | TRANSFORMS} FOR ... ::= ::= [ { }... ] ::= | --h3 11.59 (p717) --/h3 --p Add a transform element ( and/or ) to an existing transform group. --/p ::= ADD --h3 11.60 (p719) --/h3 --p Remove a transform element ( and/or ) from a transform group. --/p ::= DROP [ ] ::= TO SQL | FROM SQL --h3 11.61 (p721) --/h3 --p Remove one or more transform functions associated with a transform. --/p ::= DROP { TRANSFORM | TRANSFORMS } FOR ::= ALL | ::= --h3 11.62 (p724) --/h3 --p Define an external sequence generator. --/p ::= CREATE SEQUENCE [ ] ::= ... ::= | ::= ... ::= | ::= | | | ::= AS ::= START WITH ::= :: = INCREMENT BY ::= ::= MAXVALUE | NO MAXVALUE ::= ::= MINVALUE | NO MINVALUE ::= ::= CYCLE | NO CYCLE --h3 11.63 (p726) --/h3 --p Change the definition of an external sequence generator. --/p ::= ALTER SEQUENCE ::= ... ::= | ::= RESTART WITH ::= --h3 11.64 (p727) --/h3 --p Destroy an external sequence generator. --/p ::= DROP SEQUENCE --hr --h2 12 Access control --/h2 --h3 12.1 (p729) --/h3 --p Define privileges and role authorizations. --/p ::= | --h3 12.2 (p734) --/h3 --p Define privileges. --/p ::= GRANT TO [ { }... ] [ WITH HIERARCHY OPTION ] [ WITH GRANT OPTION ] [ GRANTED BY ] --h3 12.3 (p737) --/h3 --p Specify privileges. --/p ::= ON ::= [ TABLE ]
| DOMAIN | COLLATION | CHARACTER SET | TRANSLATION | TYPE | SEQUENCE | ::= ALL PRIVILEGES | [ { }... ] ::= SELECT | SELECT | SELECT | DELETE | INSERT [ ] | UPDATE [ ] | REFERENCES [ ] | USAGE | TRIGGER | UNDER | EXECUTE ::= [ { }... ] ::= ::= PUBLIC | ::= CURRENT_USER | CURRENT_ROLE --h3 12.4 (p741) --/h3 --p Define a role. --/p ::= CREATE ROLE [ WITH ADMIN ] --h3 12.5 (p742) --/h3 --p Define role authorizations. --/p ::= GRANT [ { }... ] TO [ { }... ] [ WITH ADMIN OPTION ] [ GRANTED BY ] ::= --h3 12.6 (p744) --/h3 --p Destroy a role. --/p ::= DROP ROLE --h3 12.7 (p745) --/h3 --p Destroy privileges and role authorizations. --/p ::= | ::= REVOKE [ ] FROM [ { }... ] [ GRANTED BY ] ::= GRANT OPTION FOR | HIERARCHY OPTION FOR ::= REVOKE [ ADMIN OPTION FOR ] [ { }... ] FROM [ { }... ] [ GRANTED BY ] ::= --hr --h2 13 SQL-client modules --/h2 --h3 13.1 (p763) --/h3 --p Define an SQL-client module. --/p ::= [ ] [ ] [ ] [ ... ] ... ::= SCHEMA | AUTHORIZATION [ FOR STATIC { ONLY | AND DYNAMIC } ] | SCHEMA AUTHORIZATION [ FOR STATIC { ONLY | AND DYNAMIC } ] ::= ::= ::= ::= ... ::= COLLATION [ FOR ] ::= [ { }... ] ::= | | --h3 13.2 (p768) --/h3 --p Name an SQL-client module. --/p ::= MODULE [ ] [ ] ::= NAMES ARE --h3 13.3 (p769) --/h3 --p Define an externally-invoked procedure. --/p ::= PROCEDURE ::= [ { }... ] ::= | ::= [ ] ::= SQLSTATE --h3 13.4 Calls to an (p772) --/h3 --h3 13.5 (p788) --/h3 --p Define all of the SQL-statements that are s. --/p ::= ::= | | | | | | | ::= | ::= |
| | | | | | | | | | | | | | | ::= | | | | | | | | | | | | | | | | | | | | | | ::= | | |
--## --## --## --## --## --## --## --## --## --## --## --## --## --## --## --## --## --## --## --## --## --## --## --## --##
SQL Data Type C Data Type
SQLSTATE char, with length 6
CHARACTER (L)3 char, with length (L+1)*k1
CHARACTER VARYING (L)3 char, with length (L+1)*k1
CHARACTER LARGE OBJECT(L) --##
--## struct {
--## long hvn3_reserved
--## unsigned long hvn2_length
--## char3 hvn2_data[L];
--## } hvn2
--## 
BINARY LARGE OBJECT(L) --##
 struct {
--## long hvn2_reserved
--## unsigned long hvn2_length
--## char hvn2_data[L];
--## } hvn2
--## 
NUMERIC(P,S) None
DECIMAL(P,S) None
SMALLINT pointer to short
INTEGER pointer to long
BIGINT pointer to long long
FLOAT(P) None
REAL pointer to float
DOUBLE PRECISION pointer to double
BOOLEAN pointer to long
DATE None
TIME(T) None
TIMESTAMP(T) None
INTERVAL(Q) None
user-defined type None
REF char, with length N
ROW None
ARRAY None
MULTISET None
--p --## 1 For character set UTF16, as well as other implementation-defined character sets in which a code unit occupies two octets, k is the length in units of C unsigned short of the character encoded using the greatest number of such units in the character set; for character set UTF32, as well as other implementation-defined character sets in which a code unit occupies four octets, k is four; for other character sets, k is the length in units of C char of the character encoded using the greatest number of such units in the character set. --br --## 2 hvn is the name of the host variable defined to correspond to the SQL data type --br --## 3 For character set UTF16, as well as other implementation-defined character sets in which a code unit occupies two octets, char or unsigned char should be replaced with unsigned short; for character set UTF32, as well as other implementation-defined character sets in which a code unit occupies four octets, char or unsigned char should be replaced with unsigned int. Otherwise, char or unsigned char should be used. --/p --hr --h2 14 Data manipulation --/h2 --h3 14.1 (p807) --/h3 --p Define a cursor. --/p ::= DECLARE [ ] [ ] CURSOR [ ] [ ] FOR ::= SENSITIVE | INSENSITIVE | ASENSITIVE ::= SCROLL | NO SCROLL ::= WITH HOLD | WITHOUT HOLD ::= WITH RETURN | WITHOUT RETURN ::= [ ] [ ] ::= FOR { READ ONLY | UPDATE [ OF ] } ::= ORDER BY --h3 14.2 (p813) --/h3 --p Open a cursor. --/p ::= OPEN --h3 14.3 (p815) --/h3 --p Position a cursor on a specified row of a table and retrieve values from that row. --/p ::= FETCH [ [ ] FROM ] INTO ::= NEXT | PRIOR | FIRST | LAST | { ABSOLUTE | RELATIVE } ::= [ { }... ] --h3 14.4 (p820) --/h3 Close a cursor. ::= CLOSE --h3 14.5 ::= SELECT [ ]
| ONLY
--h3 14.7 (p829) --/h3 --p Delete rows of a table. --/p ::= DELETE FROM [ WHERE ] --h3 14.8 (p832) --/h3 --p Create new rows in a table. --/p ::= INSERT INTO ::=
::= | | ::= [ ] [ ] ::= [ ] [ ] ::= OVERRIDING USER VALUE | OVERRIDING SYSTEM VALUE ::= DEFAULT VALUES ::= --h3 14.9 (p837) --/h3 --p Conditionally update rows of a table, or insert new rows into a table, or both. --/p ::= MERGE INTO [ [ AS ] ] USING
ON ::= ::= ... ::= | ::= WHEN MATCHED THEN ::= WHEN NOT MATCHED THEN ::= UPDATE SET ::= INSERT [ ] [ ] VALUES ::= [ { }... ] ::= | --h3 14.10 (p844) --/h3 --p Update a row of a table. --/p ::= UPDATE SET WHERE CURRENT OF --h3 14.11 (p847) --/h3 --p Update rows of a table. --/p ::= UPDATE SET [ WHERE ] --h3 14.12 (p851) --/h3 --p Specify a list of updates. --/p ::= [ { }... ] ::= | ::= | ::= ::= [ { }... ] ::= ::= | ::= ::= ::= | ::= | --h3 14.13 (p856) --/h3 --p Declare a declared local temporary table. --/p ::= DECLARE LOCAL TEMPORARY TABLE
[ ON COMMIT
ROWS ] --h3 14.14 (p858) --/h3 --p Remove the association between a locator variable and the value that is represented by that locator. --/p ::= FREE LOCATOR [ { }... ] ::= | --h3 14.15 (p859) --/h3 --p Mark a locator variable as being holdable. --/p ::= HOLD LOCATOR [ { }... ] --h3 14.16 Effect of deleting rows from base tables (p860) --/h3 --h3 14.17 Effect of deleting some rows from a derived table (p862) --/h3 --h3 14.18 Effect of deleting some rows from a viewed table (p864) --/h3 --h3 14.19 Effect of inserting tables into base tables (p865) --/h3 --h3 14.20 Effect of inserting a table into a derived table (p867) --/h3 --h