Общие элементы SQL
5.1 <Символ> (<character>)
Функция
Определяет терминальные символы языка и элементы строк.
Формат
<character> ::=
<digit> | <letter> | <special character>
<digit> ::=
0|1|2|3|4|5|6|7|8|9
<letter> ::=
<upper case letter> | <lower case letter>
<upper case letter> ::=
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
<lower case letter> ::=
a|d|c|d|e|f|g|h|i
|j|k|l|m|n|o|p|q|r
|s|t|u|v|w|x|y|z
<special character> ::=
См. Синтаксическое правило 1.
Синтаксические правила
- <Специальный символ> (<special character>) является любым символом из определенного в реализации множества символов, отличным от <цифры> (<digit>) и <буквы> (<letter>). Если в реализации индикатор конца строки является символом, он также должен быть исключен из <специальных символов> (<special character>).
Замечание: См. Формат для <перевода строки> (<newline>) в 5.3, "<Лексемы> (<token>)". - Множество <специальных символов> (<special character>) должно включать все символы, отличные от <цифры> (<digit>) и <буквы> (<letter>), встречающиеся в терминальных продукциях языка SQL, и символы знака процента и подчеркивания.
Общие правила
Нет.
5.2 <Литерал> (<literal>)
Функция
Определяет не неопределенное значение
Формат
<literal> ::=
<character string literal>
| <numeric literal>
<character string literal> ::=
'<character representation>...'
<character representation> ::=
<nonquote character>
| <quote representation>
<nonquote character ::=
См. Синтаксическое правило 1.
<quote representation> ::=
''
<numeric literal> ::=
<exact numeric literal>
| <approximate numeric literal>
<exact numeric literal> ::=
[+|-] { <unsigned integer>[.<unsigned integer>]
| <unsigned integer>.
| .<unsigned integer> }
<approximate numeric literal> ::=
<mantissa>E<exponent>
<mantissa> ::= <exact numeric literal>
<exponent> ::= <signed integer>
<signed integer> ::= [+|-] <unsigned integer>
<unsigned integer> ::=
<digit>...
Синтаксические правила
- <Символ-не-кавычки> (<nonquote character>) - это любой <символ> (<character>), отличный от символа одиночной кавычки (').
- Тип данных <литерала символьной строки> (<character string literal>) представляет строку символов. Длина <литерала символьной строки> (<character string literal>) есть число <представлений символов> (<character representation>), которые он содержит. Каж дое <представление кавычки> (<quote representation>) в <литерале символьной строки> (<character string literal>) представляет символ одиночной кавычки как в значении, так и в длине <литерала символьной строки> (<character string literal>).
- Для <литерала точного числа> (<exact numeric literal>) без десятичной точки (.) неявно предполагается наличие десятичной точки после последней <цифры> (<digit>).
- Тип данных <литерала точного числа> (<exact numeric literal>) представляет точные числа. Точность <литерала точного числа> (<exact numeric literal>) есть число <цифр> (<digit>), которые он содержит. Масштаб <литерала точного числа> (<exact numeric literal>) есть число <цифр> (<digit>) справа от десятичной точки.
- Тип данных <литерала приблизительного числа> (<approximate numeric literal>) представляет приблизительные числа. Точность <литерала приблизительного числа> (<approximate numeric literal>) есть точность его <мантиссы> (<mantissa>).
Общие правила
- Значение <литерала символьной строки> (<character string literal>) - это последовательность содержащихся в нем <символов> (<character>).
- Численное значение <литерала точного числа> (<exact numeric literal>) получается путем обычной математической интерпретации знаковой позиционной десятичной записи.
- Численное значение <литерала приблизительного числа> (<approximate numeric literal>) есть результат умножения точного численного значения, представленного <мантиссой> (<mantissa>), на число, полученное путем возведения числа 10 в степень, представляемую <порядком> (<exponent>).
5.3 <Лексема> (<token>)
Функция
Определяет лексические единицы.
Формат
<token> ::=
<nondelimiter token> | <delimiter token>
<nondelimiter token> ::=
<identifier>
| <key word>
| <numeric literal>
<identifier> ::=
<upper case letter>[{ [<underscore>]<letter or digit>}...]
<underscore> ::= _
<letter or digit> ::=
<upper case letter> | <digit>
<key word> ::=
ALL | AND | ANY | AS | ASC | AUTHORIZATION | AVG
| BEGIN | BETWEEN | BY
| CHAR | CHARACTER | CHECK | CLOSE | COBOL | COMMIT
| CONTINUE | COUNT | CREATE | CURRENT | CURSOR
| DEC | DECIMAL | DECLARE | DEFAULT | DELETE | DESC
| DISTINCT | DOUBLE
| END | ESCAPE | EXEC | EXISTS
| FETCH | FLOAT | FOR | FOREIGN | FORTRAN | FOUND
| FROM
| GO | GOTO | GRANT | GROUP | HAVING
| IN | INDICATOR | INSERT | INT | INTEGER | INTO | IS
| KEY | LANGUAGE | LIKE
| MAX | MIN | MODULE | NOT | NULL | NUMERIC
| OF | ON | OPEN | OPTION | OR | ORDER
| PASCAL | PL1 | PRECISION | PRIMARY | PRIVILEGES |
| PROCEDURE | PUBLIC
| REAL | REFERENCES | ROLLBACK
| SCHEMA | SECTION | SELECT | SET | SMALLINT | SOME
| SQL | SQLCODE | SQLERROR | SUM
| TABLE | TO | UNION | UNIQUE | UPDATE | USER
| VALUES | VIEW | WHENEVER | WHERE | WITH | WORK
<delimiter token> ::=
<character string literal>
|,|(|)|<|>|.|:|=|*|+|-|/|<>|>=|<=
<separator> ::=
{ <comment> | <space> | <newline> }...
<comment> ::=
<comment introduser> [<character>...] <newline>
<comment introduser> ::= См. Синтаксическое правило 5.
<newline> ::=
определенный в реализации индикатор конца строки
<space> ::=
символ пробела
Синтаксические правила
- <Лексическая единица> (<token>), отличная от <литерала символьной строки> (<character string literal>), не должна включать <пробел> (<space>).
- За любой <лексической единицей> (<tocken>) может следовать <разделитель> (<separator>). За <лексемой-не-ограничителем> (<nondelimiter tocken>) должны следовать <лескема-ограничитель> (<delimiter tocken>) или <разде литель> (<separator>). Если синтаксис не допускает на личия <лексемы-ограничителя> (<delimiter tocken>) за <лексемой-не-ограничителем> (<nondelimiter tocken>), то за <лексемой-не-ограничителем> (<nondelimiter tocken>) должен следовать <разделитель> (<separator>).
- <Идентификатор> (<identifier>) не должен содержать более 18 <символов> (<character>).
- <Идентификатор> (<identifier>) не должен совпадать с <ключевым словом> (<key word>).
- <Предваритель комментария> (<comment introduser>) есть последовательность двух или более дефисов (-), не раз деленных ни одним <пробелом> (<space>) или <переводом строки> (<newline>) и не входящих в <литерал символьной строки> (<character string literal>).
Общие правила
Нет.
5.4 Имена
Функция
Специфицирует имена
Формат
<table name> ::= [<authorization identifier>.]
<table identifier>
<authorization identifier> ::= <identifier>
<table identifier> ::= <identifier>
<column name> ::= <identifier>
<correlation name> ::= <identifier>
<module name> ::= <identifier>
<cursor name> ::= <identifier>
<procedure name> ::= <identifier>
<parameter name> ::= <identifier>
Синтаксические правила
- <Имя таблицы> (<table name>) идентифицирует именованную таблицу.
- Если <имя таблицы> (<table name>) не включает <идентификатора полномочий> (<authorization identifier>), то:
a) Если <имя таблицы> (<table name>) содержится в <схеме> (<schema>), то по умолчанию предполагается <идентификатор полномочий> (<authorization identifier>), определяемый как <идентификатор полномочий схемы> (<schema authorization identifier>) данной <схемы> (<schema>).
b) Если <имя таблицы> (<table name>) содержится в <модуле> (<module>), то по умолчанию предполагается <идентификатор полномочий> (<authorization identifier>), определяемый как <идентификатор полномочий модуля> (<module authorization identifier>) данного <модуля> (<module>). - Два <имени таблицы> (<table name>) совпадают, в том и только в том случае, если они включают один и тот же <идентификатор таблицы> (<table identifier>) и один и тот же <идентификатор полномочий> (<authorization identifier>), независимо от того, явно или неявно указаны <идентификаторы полномочий> (<authorization identifier>).
- <Имя таблицы> (<table name>) объявляется в <определении таблицы> (<table definition>) или в <определении представления> (<view definition>).
- <Имя таблицы> (<table name>) в <операторе SQL> (<SQL statement>) должно идентифицировать таблицу, определенную в <схеме> (<schema>).
- <Идентификатор полномочий> (<authorization identifier>) представляет идентификатор полномочий.
- <Идентификатор> (<identifier>) объявляется как <имя кореляции> (<correlation name>) и ассоциируется с таблицей для индивидуальной области действия. Область действия <имени кореляции> (<correlation name>) - это либо <оператор выборки> (<select statement>), либо <подзапрос> (<subquery>), либо <спецификация запроса> (<query specification>) (см. 5.20, "<Раздел from> (<from clause>)"). Области действия могут быть вложенными. В разных областях действия одно и то же <имя кореляции> (<correlation name>) может быть ассоциировано с разными таблицами или с одной и той же таблицей.
- <Имя столбца> (<column name>) идентифицирует именованный столбец. <Идентификатор> (<identifier>) определяется как <имя столбца> (<column name>) через <определение таблицы> (<table definition>) или через <определение представления> (<view definition>).
- <Имя модуля> (<module name>) идентифицирует <модуль> (<module>).
- <Имя курсора> (<cursor name>) идентифицирует <курсор> (<cursor>).
- <Имя процедуры> (<procedure name>) идентифицирует <процедуру> (<procedure>).
- <Имя параметра> (<parameter name>) идентифицирует параметр.
Общие правила
Нет.
5.5 <Тип данных> <data type>
Функция
Специфицирует тип данных.
Формат
<data type> ::=
<character string type>
| <exact numeric type>
| <approximate numeric type>
<character string type> ::=
CHARACTER [(<lenght>)]
| CHAR [(<lenght>)]
<exact numeric type> ::=
NUMERIC [(<precision> [,<scale>])]
| DECIMAL [(<precision> [,<scale>])]
| DEC [(<precision> [,<scale>])]
| INTEGER
| INT
| SMALLINT
<approximate numeric type> ::=
FLOAT [(<precision>)]
| REAL
| DOUBLE PRECISION
<lenght> ::= <unsigned integer>
<precision> ::= <unsigned integer>
<scale> ::= <unsigned integer>
Синтаксические правила
- CHAR - это синоним для CHARACTER. DEC - это синоним для DECIMAL. INT - это синоним для INTEGER.
- Значение <целого без знака> (<unsigned integer>), т.е. <длина> (<lenght>> или <точность> (<precision>), должно быть больше 0.
- Если <длина> (<lenght>) опущена, то она предполагается равной 1. Если <масштаб> (<scale>) опущен, то предполагается равным 0. Если опущена <точность> (<precision>), то значение определяется в реализации.
- <Масштаб> (<scale>) для <типа точных чисел> (<exact numeric type>) не должен быть больше, чем <точность> (<precision>) для <типа точных чисел> (<exact numeric type>).
- CHARACTER специфицирует тип данных строк символов с длиной, специфицируемой <длиной> (<lenght>).
- NUMERIC специфицирует тип данных точных чисел с точностью и масштабом, специфицируемыми через <точность> (<precision>) и <масштаб> (<scale>).
- DECIMAL специфицирует тип данных точных чисел с масштабом, специфицируемым <масштабом> (<scale>) и определяемой в реализации точностью, равной или большей зна чения указанной <точности> (<precision>).
- INTEGER специфицирует тип данных точных чисел с определенной в реализации точностью и масштабом 0.
- SMALLINT специфицирует тип данных точных чисел с масштабом 0 и определенной в реализации точностью не большей, чем определенная в реализации точность INTEGER.
- FLOAT специфицирует тип данных приблизительных чисел с двоичной точностью, равной или большей значения указанной <точности> (<precision>).
- REAL специфицирует тип данных приблизительных чисел с определенной в реализации точностью.
- DOUBLE PRECISION специфицирует тип данных приблизительных чисел с определенной в реализации точностью большей, чем определенная в реализации точность для REAL.
Общие правила