SQL EMBEBIDO
Sentencia
USING
Cuando hacemos SQL dinámicos requerimos construir dinámicamente la
instrucción SELECT para extraer los registros que necesitamos de la base de
datos. Muchas veces las condiciones de
selección son cambiantes porque los
valores de búsqueda son distintos dependiendo del proceso. En el programa,
utilizamos variables que contienen el
valor de búsqueda de uno o varios campos dentro de las tablas de datos. Las variables en el algoritmo de programación
van teniendo valores cambiantes y no es
posible colocar en Hard Code (código duro) la sentencia SELECT del SQL. La sentencia “USING”
permite solucionar este inconveniente.
Supongamos que tenemos que generar un reporte de
inventario para varias filiales de una corporación. Tenemos en la base de datos
una tabla de empresas filiales:
01=
filia1 02= filial2 03 = filial3
En RPG FREE
1.-Declaramos las variables de trabajo para construir la
sentencia dinámica
D
Varsql1 s 1000a Inz(*Blanks)
D V_Sql1 s 1000a
2.-Construimos la sentencia dinámica.
(Como no sabemos la compañía
que hay listar colocamos = ?
exec sql set
:V_SQL1 =
'select *
'||
'from INVENTARIO '||
'Where CIA = ?
' ||
'order by CIA';
3.-Ejecutamos el PREPARE
exec sql Prepare varsql1 From :v_sql1;
4.-Declaramos el Cursor.
exec sql
Declare c1 dynamic Scroll Cursor for varsql1
5.-Ejecutamos
el OPEN del Cursor
exec sql open c1
using :Var_CIA;
En este punto, se entiende que serán procesados
aquellos registros de la base de datos
Cuyo valor en el campo compañía sea igual al valor del
contenido de la variable: Var_CIA
6.- Ejecutamos el Fetch que sea requerido
exec sql fetch next
from c1 into :Filler
Un caso menos obvio en su programación es el %LIKE%
para armar la sentencia SQL. (Like = que contenga algo parecido a este texto)
Para utilizar el %LIKE% es necesario primero construir el contenido de
la variable que será aplicada en el USING en forma adecuada. Es decir en este
caso la variable: Var_Cía no debería contiene
un valor numérico o alfabético sino que es el resultado de la concatenación de
varios elementos que hacen posible para el SQL interpretar lo que se está
pidiendo procesar.
Por ejemplo, supongamos que queremos buscar una
dirección que tenga la palabra MADRID.
En este caso requerimos el uso del LIKE de la siguiente manera:
Utilizamos una variable que llamaremos CIUDAD bien sea
que el usuario la introduzca por pantalla o que la manipulemos en el programa.
CIUDAD = MADRID
Vamos a denominar a la variable colocada en la
sentencia USING como: QRY_CIUDAD
Hacemos lo siguiente:
QRY_CIUDAD = ‘%’ + %trim(CIUDAD) + ‘%’
La sentencia SQl la podemos construir normalmente:
exec sql set :V_SQL1
=
'select
ESTADO, CIUDAD, Descri '||
'from
libsuarez/ciudades '||
'Where ciudad like ? ' ||
'order by ciudad';
Cuando abrimos el cursor podemos colocar
exec sql open
c1 using :QRY_CIUDAD;
Si te pareció
interesante, reenvíalo a un amigo haciendo click en el sobrecito que está al
final del artículo. El conocimiento es valioso, compártelo.
Autor: Ing. Liliana Suárez
Autor: Ing. Liliana Suárez
No comments:
Post a Comment