Hay ocasiones cuando una sustitución de variable es referenciada
múltiples veces en la misma sentencia. En tales situaciones, el servidor Oracle
solicitará ingresar un valor para cada ocurrencia de la variable de sustitución
con amspersand simple, esto puede ser ineficiente en un query muy complejo.
Ejemplo:
--
ESQUEMA HR
--
REGIONS LOCATIONS DEPARTMENTS COUNTRIES JOB_HISTORY EMPLOYEES JOBS
SELECT
&col1, first_name, last_name, phone_number
FROM employees
WHERE first_name LIKE '%&filtro%' ORDER BY
&col1;
La aparición de la variable ocurre varias veces pero aplica en
diferentes clausulas. La captura del mismo valor para una variable es
ineficiente. Y otro error que puede surgir son los errores de tipografía. Puede
ser que en la segunda escribamos otro valor.
Oracle no ofrece la verificación del valor ingresado aun que tenga el
mismo nombre de variable.
Algo que podemos mirar cuando repetimos una columna en la clausula
SELECT es que Oracle las enumera.
Ejemplo:
--
ESQUEMA HR
--
REGIONS LOCATIONS DEPARTMENTS COUNTRIES JOB_HISTORY EMPLOYEES JOBS
SELECT
&col_order, job_title, min_salary, max_salary
FROM jobs
WHERE &col_condicion >= &valor
ORDER
BY &col_order;
En situaciones cuando una sustitución de variable es referenciada
muchas veces y necesitamos que la variable tenga el mismo valor en todas las
ocurrencias dentro de la sentencia, es preferible utilizar las sustitución
amspersand doble. Como hacerlo? Lo que debemos realizar es que a la primera
variable de las múltiples que aparecen en la sentencia, en lugar de colocarle
un amspersand debemos ponerle dos. Cuando Oracle encuentra una variable de
sustitución con amspersand doble, una variable sesión es definida para esa
variable, usted solo ingresará solo una vez el valor para esa variable. El
valor para las siguientes apariciones de la variable será resuelto con la
variable sesión. Esta variable permanecerá en sesión. Y si intentas ejecutar
nuevamente una consulta con una variable de sustitución que ya fue definida, el
cliente sql ya no te pedirá el valor para esa variable ya que se encuentra en
sesión y la resuelve con el valor de sesión.
Las variables de sustitución doble se almacenan en la sesión y ahí
permanecerán hasta que la sesión sea terminada de cualquier forma. Para
eliminarla debemos utilizar el comando de control UNDEFINE el cual se
describirá posteriormente.
Ejemplos:
--
ESQUEMA HR
--
REGIONS LOCATIONS DEPARTMENTS COUNTRIES JOB_HISTORY EMPLOYEES JOBS
SELECT
employee_id, first_name, last_name, email, phone_number, hire_date
FROM
employees
WHERE
first_name LIKE '%&busqueda%'
OR last_name LIKE '%&busqueda%';
SELECT
employee_id, first_name, last_name, email, phone_number, hire_date
FROM
employees
WHERE
first_name LIKE '%&&busqueda%'
OR last_name LIKE '%&busqueda%';
--
ESQUEMA HR
--
REGIONS LOCATIONS DEPARTMENTS COUNTRIES JOB_HISTORY EMPLOYEES JOBS
SELECT
location_id, street_address, postal_code, city, state_province, country_id
FROM
locations
WHERE
street_address LIKE '%&&texto%'
ORDER
BY location_id;
undefine
texto;
Comentarios
Publicar un comentario