Referencias a parámetros y variables SQL en SQL PL
Ciertas reglas se aplican a las referencias a parámetros SQL y variables que están en rutinas SQL PL, que incluyen funciones SQL, procedimientos SQL y triggers avanzados.

Por lo general, se puede hacer referencia a las variables en las sentencias SQL en las rutinas PL de SQL, que incluyen funciones SQL, procedimientos SQL y desencadenadores avanzados. Sin embargo, las variables de host no se pueden especificar en rutinas SQL PL. En cambio, dependiendo del contexto, las sentencias en las rutinas SQL PL pueden hacer referencia a variables SQL, parámetros SQL, variables de transición o variables globales siempre que se pueda especificar una expresión o variable en una sentencia, incluyendo aquellos casos en los que se puede especificar una variable de host en contextos distintos a SQL PL. Es posible hacer referencia a las variables de SQL en cualquier parte de la sentencia compuesta en la que están declaradas, incluyendo una sentencia SQL que está anidada de forma directa o indirecta dentro de dicha sentencia compuesta. Los parámetros SQL se pueden referenciar en una función SQL o cuerpo de procedimiento SQL. Las variables de transición pueden referenciarse en un cuerpo de activación.
En una sentencia SQL con variables pueden surgir ambigüedades, sobre todo cuando dos o más variables tienen el mismo nombre o cuando una variable y otro objeto tienen el mismo nombre. En tales situaciones, puede resultar confuso determinar a qué variable se hace referencia y si el identificador es el nombre de una variable u otro objeto, como una columna. Si el identificador es el nombre de una variable, puede resultar difícil determinar si la referencia se refiere a una variable SQL, un parámetro SQL, una variable de transición o una variable global.
El nombre de una variable SQL, parámetro SQL o variable global en una función SQL o procedimiento SQL puede ser el mismo que el nombre de una columna en una tabla o vista referenciada en la función o procedimiento. El nombre de una variable SQL, variable de transición o variable global en un disparador puede ser el mismo que el nombre de una columna en una tabla o vista a la que se hace referencia en el disparador. El nombre de una variable SQL también puede ser el mismo que el nombre de otra variable SQL declarada en la misma función, procedimiento o activador. Esto puede ocurrir cuando las dos variables de SQL están declaradas en sentencias compuestas diferentes. La sentencia compuesta que contiene la declaración de una variable SQL determina el ámbito de dicha variable. Para obtener más información, consulte declaración compuesta.
Si el nombre variable SQL, parámetro SQL o variable global no está cualificado, las siguientes reglas describen si el nombre se refiere a un identificador, una variable SQL o un parámetro SQL:
En las sentencias SET PATH o SET SCHEMA, el nombre se comprueba como variable SQL, parámetro SQL, variable de transición o variable global. Si no se encuentra una variable SQL, parámetro SQL, variable de transición o variable global con ese nombre, se asume que el nombre es un nombre de esquema.
En las sentencias CONNECT, RELEASE y SET CONNECTION, el nombre se utiliza como nombre del servidor.
En la sentencia CALL, el nombre se utiliza como nombre del procedimiento.
En la sentencia ASSOCIATE LOCATORS, o DESCRIBE PROCEDURE, el nombre se utiliza como nombre del procedimiento.
Los nombres idénticos se deben calificar explícitamente. Calificar un nombre puede aclarar si el nombre se refiere a una columna, variable global, variable SQL, parámetro SQL o variable de transición:
- Un parámetro SQL puede calificarse con el nombre de la función SQL o del procedimiento SQL.
- Una variable SQL puede calificarse con la etiqueta de la instrucción compuesta donde se declara una variable SQL.
- Una variable de transición puede calificarse con el nombre de correlación especificado en la instrucción CREATE TRIGGER o ALTER TRIGGER.
- Una variable global puede calificarse con el esquema especificado implícita o explícitamente cuando se crea la variable global.
Si el nombre no está cualificado, o está cualificado pero sigue siendo ambiguo, las siguientes reglas describen cómo se resuelve el nombre. El nombre se resuelve buscando una coincidencia en el siguiente orden:
- Si las tablas y vistas especificadas en una función o procedimiento SQL en el momento en que se crea la función o procedimiento, el nombre se comprueba primero como una columna.
- Si no se encuentra como columna, el nombre se comprueba como variable SQL, parámetro SQL o variable de transición. Una variable SQL puede declararse dentro de la sentencia compuesta que contiene la referencia, o dentro de una sentencia compuesta en la que esa sentencia compuesta está anidada. Si dos variables SQL, una variable SQL y un parámetro SQL, o una variable SQL y una variable de transición, tienen el mismo nombre, se utiliza la variable SQL que se declara en la instrucción compuesta más interna.
- Si no se encuentra como nombre de variable SQL, el nombre se comprueba como nombre de parámetro SQL o variable de transición.
- Si no se encuentra como parámetro SQL o variable de transición, el nombre se comprueba como variable global.
Si el nombre sigue sin resolverse como columna, variable SQL, parámetro SQL, variable global o variable de transición y el ámbito del nombre incluía una tabla o vista que no existe en el servidor actual, se asume que es una columna. Si todas las tablas y vistas existen en el servidor actual, se asume que es una variable global. De lo contrario, se emite un error.
El nombre de una variable SQL, parámetro SQL, variable de transición o variable global en una función SQL, procedimiento SQL o disparador puede ser el mismo que un identificador utilizado como nombre en ciertas sentencias SQL. Los nombres calificados para variables SQL, parámetros SQL o variables de transición no son compatibles con estas sentencias.
