SQL 92
SQL 92
SQL 92
En este anexo se va a presentar la sintaxis precisa del conjunto de instrucciones del lenguaje
SQL/92 estudiadas. La notación que se va a seguir para presentar esta sintaxis es una versión
extendida de BNF1. En BNF, cada elemento sintáctico se define mediante un conjunto de reglas de
producción. Estas reglas definen un elemento en términos de una fórmula formada de caracteres,
tiras de caracteres y elementos sintácticos que pueden ser usados para formar una instancia de dicho
elemento. A continuación se incluyen los símbolos y reglas de la versión de BNF que se ha usado:
• WLUDGHFDUDFWHUHVHQFXUVLYD: define un nombre de un identificador.
• tira de caracteres normal en minúsculas: define el nombre de un elemento sintáctico que no es
un símbolo terminal y que se define en otra regla de producción.
• TIRA DE CARACTERES EN MAYÚSCULAS: es un símbolo terminal de la gramática y define una
palabra reservada del lenguaje SQL.
• ::= El operador de producción. Se usa en una regla de producción para separar el elemento
definido y la forma que lo define. El elemento que se define aparece a la izquierda del
operador y la fórmula que lo define a la derecha.
•[] Los corchetes cuadrados sirven para indicar elementos opcionales dentro de una
fórmula.
• {} Las llaves se usan para agrupar elementos en una fórmula. La porción de fórmula
incluida entre llaves debe ser explícitamente especificada.
•| La barra vertical es el operador de alternativa que permite indicar que la porción de
fórmula que sigue a la barra es una alternativa a la porción de la fórmula que le precede. Si la
barra aparece en la fórmula sin estar incluida en unos corchetes o llaves indica una alternativa
completa para los elementos definidos en la fórmula. Si aparece en una porción de la fórmula
que está entre corchetes o llaves indica alternativas para el contenido del par de corchetes o
llaves más internos.
• Si [\] es un elemento sintáctico, OLVWDB[\]es una lista de elementos del tipo [\]separados por
algún tipo de separador (espacio en blanco, salto de línea, etc.).
• Si [\]es un elemento sintáctico, FRPDOLVWDB[\] es una lista de elementos del tipo [\]separados
por comas.
(VWDHVOD~QLFDGRFXPHQWDFLyQSHUPLWLGDHQHOH[DPHQGHEDVHVGHGDWRV\QRGHEHOOHYDU
DQRWDFLRQHV
35,0(5$3$57(64/
'HILQLFLyQGHGDWRV
1) definición_esquema ::=
CREATE SCHEMA [HVTXHPD] [AUTHORIZATION XVXDULR]
[lista_elemento_esquema]
2) elemento_esquema ::=
definición_dominio | definición_tabla |
definición_vista | definición_restricción | definición_privilegio
3) definición_dominio ::=
CREATE DOMAIN [AS] tipo_dato
[definición_valor_por_defecto]
[lista_definición_restricción_dominio]
5) definición_restricción_dominio ::=
[CONSTRAINT UHVWULFFLyQ] CHECK (expresión_condicional) [cuando_comprobar]
6) cuando_comprobar ::=
[[NOT] DEFERRABLE][INITIALLY {IMMEDIATE | DEFERRED}]
7) definición_tabla ::=
CREATE TABLE WDEODBEDVH
comalista_definición_columna[comalista_definición_restricción_tabla]
8) definición_columna ::=
FROXPQD { tipo_dato | GRPLQLR } [definición_valor_por_defecto]
[lista_definición_restricción_columna]
9) definición_restricción_columna ::=
[CONSTRAINT UHVWULFFLyQ]
{NOT NULL |
PRIMARY KEY |
UNIQUE |
REFERENCES tabla [(comalista_FROXPQD)]
[MATCH {FULL | PARTIAL } ]
[ON DELETE acción_referencia]
[ON UPDATE acción_referencia] |
CHECK (expresión_condicional) }
[cuando_comprobar]
([SUHVLRQHVGHWDEOD
25) expresión_tabla ::=
expresión_concatenación_tabla | expresión_no_concatenación_tabla
$FWXDOL]DFLyQGHGDWRV
38) inserción ::=
INSERT INTO tabla { [(comalista_FROXPQD)] expresión_tabla | DEFAULT VALUES }
([SUHVLRQHVFRQGLFLRQDOHV
42) expresión_condicional ::=
término_condicional | expresión_condicional OR término_condicional
([SUHVLRQHVHVFDODUHV
58) expresión_escalar ::= expresión_numérica |
expresión_tira_caracteres |
0LVFHOiQHD
67) tabla ::= WDEODBEDVH| YLVWD
Para facilitar el manejo de la sintaxis, a continuación se listan todas las categorías sintácticas de
SQL92 que se han definido ordenadas alfabéticamente indicando, con el número que las acompaña,
en qué orden se puede encontrar su definición.
acción_referencia 10)
actualización 39)
alteración_dominio 17)
alteración_tabla 18)
asignación 40)
compración_nulo 53)
comprobación_condicional 45)
cuando_comprobar 6)
concatenación_tira_caracteres 65)
condición_all_any 55)
condición_between 50)
condición_comparación 48)
condición_exists 56)
condición_in 52)
condición_like 51)
condición_match 54)
condición_primaria 46)
condición_simple 47)
condición_unique 57)
constructor_fila 35)
constructor_tabla 34)
definición_columna 8)
definición_dominio 3)
definición_esquema 1)
definición_privilegio 14)
definición_restricción 13)
definición_restricción_columna 9)
definición_restricción_dominio 5)
definición_restricción_tabla 11)
definición_tabla 7)
definición_valor_por_defecto 4)
definición_vista 12)
elemento_esquema 2)
eliminación 41)
eliminación_autorización 24)
eliminación_dominio 20)
eliminación_esquema 19)
eliminación_restricción_general 23)
eliminación_tabla_base 21)
eliminación_vista 22)
9
escape 69)
expresión_concatenación_tabla 26)
expresión_condicional 42)
expresión_conjuntista_tabla 29)
expresión_escalar 58)
expresión_numérica 59)
expresión_SELECT 36)
expresión_tabla 25)
expresión_tira_caracteres 64)
factor_condicional 44)
factor_numérico 61)
función_sistema 70)
función_tiempo 72)
función_usuario 71)
inserción 38)
item_seleccionado 37)
numero_primario 62)
objeto 16)
patrón 68)
predicado_comparación 49)
privilegio 15)
referencia_función_agregada 63)
referencia_tabla 27)
tabla 67)
tabla_primaria 32)
tabla_primaria_conjuntista 33)
término_condicional 43)
término_conjuntista_tabla 30)
término_numérico 60)
término_tabla 31)
tipo_concatenación 28)
tira_caracteres_primaria 66)
10
6(*81'$3$57(64/'(25$&/(
'HILQLFLyQGHUHODFLyQEiVLFD
1) Definición_relación_básica::= CREATE TABLE nom_relación
(comalista_HOHPHQWRBUHODFLyQBEiVLFD
2) elemento_relación_básica::= GHILQLFLyQBDWULEXWR
|UHVWULFFLyQBUHODFLyQ
3) definición_atributo ::= nom_atributo WLSRBGDWRV
[DEFAULT (expresión)]
[OLVWDBUHVWULFFLyQBDWULEXWR]
4) tipo_datos ::= | CHAR (longitud)
| VARCHAR (longitud)
| NUMBER [(precisión[, escala])]
| DATE
5) restricción_atributo::= [CONSTRAINT nombre_restricción]
{[NOT] NULL
| UNIQUE
| PRIMARY KEY
| REFERENCES nom_relación* [(nom_atributo*)]
[ON DELETE CASCADE]
| CHECK (FRQGLFLyQ) }
[FXDQGRBFRPSUREDU]
6) restricción_relación ::=
[CONSTRAINT nombre_restricción]
{ UNIQUE (comalista_nom_atributo)
| PRIMARY KEY (comalista_nom_atributo)
| FOREIGN KEY (comalista_nom_atributo)
REFERENCES nom_relación* [(comalista_nom_atributo*)]
[ON DELETE CASCADE]
| CHECK (FRQGLFLyQ)}
[FXDQGRBFRPSUREDU]
7) cuando_comprobar
[[NOT] DEFERRABLE][INITIALLY {INMEDIATE | DEFERRED}]
11
$QH[R/HQJXDMH3/64/
(VWUXFWXUDGHXQEORTXH3/64/
DECLARE Sección de declaración de variables;
BEGIN Sentencias del bloque; END
6HFFLyQGHGHFODUDFLyQGHYDULDEOHV
QRPEUHBYDULDEOH tipo_dato
tipo_dato::= {NUMBER CHAR( ) DATE }
6HQWHQFLDVGHOEORTXH3/64/
secuencia_de_sentencias::= sentencia [;secuencia_de_sentencias]
,) condición 7+(1 secuencia_de_sentencias
[; (/6( secuencia_de_sentencias]; (1',)
:+,/( condición /223 secuencia_de sentencias ; (1'/223
)25FRQWDGRU,1 PtQLPR .. Pi[LPR/223secuencia_de_sentencias ; (1'/223
- Asignación: QRPEUHBYDULDEOH H[SUHVLyQ
- Sentencias SQL: INSERT, DELETE, UPDATE, SELECT... INTO...
Manejo de errores:RAISE_APPLICATION_ERROR (QURBHUURU, ' PHQVDMH )
Sentencias de entrada-salida: dbms_output.put_line ('PHQVDMH').
12
Para facilitar el manejo de la sintaxis, a continuación se listan todas las categorías sintácticas de
Oracle 8 que se han definido ordenadas alfabéticamente indicando, con el número que las
acompaña, en qué orden se puede encontrar su definición.
cuando_comprobar 7
definición_atributo 3
definición_operación_grant 11
definición_regla 12
definición_relación_básica 1
definición_vista 10
disyunción_eventos 13
elemento_relación_básica 2
evento 14
modificación_relación 8
restricción 9
restricción_atributo 5
restricción_relación 6
tipo_datos 4