Sentencia CREATE ALIAS
La sentencia CREATE ALIAS define un alias para un módulo, apodo, secuencia, tabla, vista u otro alias. Los alias también se conocen con el nombre de sinónimos.
Invocación
Esta sentencia se puede incorporar a un programa de aplicación o emitir mediante el uso de sentencias de SQL dinámico. Es una sentencia ejecutable que puede prepararse de forma dinámica sólo si el comportamiento de ejecución de DYNAMICRULES está en vigor para el paquete (SQLSTATE 42509).
Autorización
- Autorización IMPLICIT_SCHEMA para la base de datos, si el nombre de esquema implícito o explícito del alias no existe
- Autorización SCHEMAADM en el esquema, si el nombre del esquema del alias hace referencia a un esquema existente
- El privilegio CREATEIN para el esquema, si el nombre del esquema del alias hace referencia a un esquema existente, o el privilegio CREATEIN en SYSPUBLIC, si se está creando un alias público
- Autorización DBADM
Los privilegios requeridos para utilizar el objeto al que se hace referencia mediante su alias son idénticos a los privilegios requeridos para utilizar el objeto directamente.
Para sustituir un alias existente, el ID de autorización de la sentencia debe ser el propietario del alias existente (SQLSTATE 42501).
Sintaxis
Descripción
- OR REPLACE
- Especifica que se debe sustituir la definición del alias si existe uno en el servidor actual. La definición existente se descarta de forma efectiva antes de que se sustituya la nueva definición en el catálogo. Esta opción se ignora si no existe una definición para el alias en el servidor actual. Esta opción sólo puede especificarla el propietario del objeto.
- PUBLIC
- Especifica que el alias es un objeto del esquema del sistema SYSPUBLIC.
- nombre-alias
- Indica el nombre del alias. En el caso de los alias de tabla, el nombre no debe identificar un apodo, una tabla, una vista o un alias de tabla que ya exista en el servidor actual. En el caso de los alias de módulo, el nombre no debe identificar un módulo o un alias de módulo que ya exista en el servidor actual.
En el caso de los alias de secuencia, el nombre no debe identificar una secuencia o un alias de secuencia que ya exista en el servidor actual.
Si se especifica un nombre de dos partes, el nombre del esquema no puede empezar por 'SYS' (SQLSTATE 42939) excepto si se especifica PUBLIC, en cuyo caso el nombre de esquema debe ser SYSPUBLIC (SQLSTATE 428EK).
- FOR TABLE nombre-tabla, nombre-vista, apodo o nombre-alias2
- Identifica la tabla, la vista, el apodo o el alias de tabla para el que se ha definido nombre-alias. En caso de proporcionar otro alias (nombre-alias2), este no debe ser el mismo que el nuevo nombre-alias que se está definiendo (en su forma completamente calificada). El nombre-tabla no puede ser una tabla temporal declarada (SQLSTATE 42995).
- FOR MODULE nombre-módulo o nombre-alias2
- Identifica el módulo o el alias de módulo para el que se ha definido nombre-alias. En caso de proporcionar otro alias (nombre-alias2), este no debe ser el mismo que el nuevo nombre-alias que se está definiendo (en su forma completamente calificada).
- FOR SEQUENCE nombre-secuencia o nombre-alias2
- Identifica la secuencia o el alias de secuencia para el que se ha definido nombre-alias. En caso de proporcionar otro alias (nombre-alias2), este no debe ser el mismo que el nuevo nombre-alias que se está definiendo (en su forma completamente calificada). El nombre-secuencia no debe ser una secuencia generada por el sistema para una columna de identidad (SQLSTATE 428FB).
Notas
- La palabra clave PUBLIC se utiliza para crear un alias público (también conocido como sinónimo público). Si la palabra clave PUBLIC no se utiliza, el tipo de alias es un alias privado (también conocido como sinónimo privado).
- Los alias públicos solo se pueden utilizar en las sentencias SQL y con el programa de utilidad LOAD.
- La definición del alias de tabla creado recientemente se almacena en SYSCAT.TABLES. La definición del alias de módulo creado recientemente se almacena en SYSCAT.MODULES. La definición del alias de secuencia creado recientemente se almacena en SYSCAT.SEQUENCES.
- Se puede definir un alias para un objeto que no exista en el momento de la definición. Si no existe, aparece un mensaje de aviso (SQLSTATE 01522). No obstante, el objeto al que se hace referencia debe existir al compilar una sentencia de SQL que contenga dicho alias; de lo contrario, aparece un mensaje de error (SQLSTATE 52004).
- Se puede definir un alias para hacer referencia a otro alias como parte de una cadena de alias, pero dicha cadena está sujeta a las mismas restricciones que un alias normal cuando se utiliza en una sentencia de SQL. La cadena de alias se resuelve de la misma manera que un solo alias. Si un alias utilizado en una sentencia de un paquete, una rutina de SQL, un activador, la expresión por omisión de una variable global o una definición de vista apunta a una cadena de alias, se registrará una dependencia para el paquete, la rutina de SQL, el activador, la variable global o la vista en cada alias de la cadena. Un alias no puede hacer referencia a sí mismo en una cadena de alias y un ciclo de este tipo se detecta en el momento de la definición de los alias (SQLSTATE 42916).
- Resolución de un nombre de alias sin calificar: cuando se resuelve un nombre sin calificar, se tienen en cuenta primero los alias privados y luego los públicos.
- Vinculación conservadora para los alias públicos: si se utiliza un alias público en una sentencia de un paquete, una rutina de SQL, un activador, la expresión por omisión de una variable global o una definición de vista, estos objetos seguirán utilizando el alias público independientemente de qué otro objeto con el mismo nombre se cree a continuación.
- La creación de un alias con un nombre de esquema que todavía no existe dará como resultado la creación implícita de ese esquema siempre que el ID de autorización de la sentencia disponga de autorización IMPLICIT_SCHEMA. El propietario del esquema es SYSIBM. El privilegio CREATEIN sobre el esquema se otorga a PUBLIC.
- Alternativas de sintaxis: La sintaxis siguiente solo está soportada para la compatibilidad entre productos.
- SYNONYM puede especificarse en lugar de ALIAS
Ejemplos
- Ejemplo 1:
HEDGES intenta crear un alias para una tabla T1
(ambos sin calificar).
Se crea el alias HEDGES.A1 para HEDGES.T1.CREATE ALIAS A1 FOR T1 - Ejemplo 2:
HEDGES intenta crear un alias para una tabla (ambos calificados).
Se crea el alias HEDGES.A1 para MCKNIGHT.T1.CREATE ALIAS HEDGES.A1 FOR MCKNIGHT.T1 - Ejemplo 3:
HEDGES intenta crear un alias para una tabla (el alias en un
esquema diferente; HEDGES no es DBADM;
HEDGES no tiene el privilegio CREATEIN para el esquema MCKNIGHT).
Este ejemplo falla (SQLSTATE 42501).CREATE ALIAS MCKNIGHT.A1 FOR MCKNIGHT.T1 - Ejemplo 4:
HEDGES intenta crear un alias para una tabla no definida
(ambos calificados; FUZZY.WUZZY no existe).
Esta sentencia resulta satisfactoria pero emite un mensaje de aviso (SQLSTATE 01522).CREATE ALIAS HEDGES.A1 FOR FUZZY.WUZZY - Ejemplo 5:
HEDGES intenta crear un alias para un alias (ambos calificados).
CREATE ALIAS HEDGES.A1 FOR MCKNIGHT.T1 CREATE ALIAS HEDGES.A2 FOR HEDGES.A1La primera sentencia resulta satisfactoria (como en el ejemplo 2).
La segunda sentencia es satisfactoria y crea una cadena de alias, según la cual HEDGES.A2 hace referencia a HEDGES.A1, que a su vez hace referencia a MCKNIGHT.T1. Observe que no importa si HEDGES tiene privilegios o no sobre MCKNIGHT.T1. El alias se crea sean cuales sean los privilegios de las tablas.
- Ejemplo 6: Designar A1 como alias para
el apodo FUZZYBEAR.
CREATE ALIAS A1 FOR FUZZYBEAR - Ejemplo 7: Una gran organización tiene un
departamento financiero con el número D108 y un departamento de personal con el número
D577. D108
mantiene determinada información en una tabla que reside en un IBM®
RDBMS. D577 conserva determinados registros en una tabla que reside en Oracle
RDBMS. Un DBA define los dos RDBMS como fuentes de datos de un sistema federado y
asigna a las tablas los apodos de DEPTD108 y DEPTD577, respectivamente. El usuario de un sistema federado necesita crear vínculos entre estas tablas, pero
preferiría hacer referencia a ellas por los nombres que tienen más sentido que
sus apodos alfanuméricos. Por lo tanto, el usuario define FINANCE como un alias para DEPTD108 y PERSONNEL
como un alias para DEPTD577.
CREATE ALIAS FINANCE FOR DEPTD108 CREATE ALIAS PERSONNEL FOR DEPTD577 - Ejemplo
8:Crear un alias público llamado TABS para la vista de catálogo
SYSCAT.TABLES.
CREATE PUBLIC ALIAS TABS FOR SYSCAT.TABLES
