« Instalación de RAC en 10gr2 paso a paso (con máquinas virtuales)Oracle 11g : Exámen 1z0-054 Performance Tuning »

Las famosas comillas, para escribir una comilla ….. ahorratelas!!



Quien alguna vez no lucho con las comillas dentro de Sql Dinámicos para poder mostrar una comilla

Algo complicado, engorroso y dificultoso.



Claro, era el típico caso de que dentro de una instrucción debiamos colocar como trescientas comillas para que apareciera una , que entretenido!!!

Por ejemplo si queríamos una consulta dinámica , que nos desplegará un where con una literal , debiamos escribir algo así

Ejemplo :

var_sql := 'update '|| var_tabla ||' set campo1 = '||'valor literal';

Oviamente la sentencia anterior nos arrojaría error , pues en la transformación de la sentencia el CBO la asumiría como

Siendo var_tabla = TAB_PAGOS y 'valor literal' = ADF4561;

SQL> r
1 declare
2 var_sql varchar2(1000);
3 var_tabla varchar2(1000) := 'TABLA1';
4 begin
5 var_sql := 'update '||var_tabla||' set campo1 = '||'ADFR5141';
6 dbms_output.put_line(var_sql);
7* end;

update TABLA1 set campo1 = ADFR5141 –> Está sentenciada error si es ejecutada

PL/SQL procedure successfully completed.

SQL>

Por ende hay un error y se debiesen generar las comillas para su visualización

var_sql := 'update '|| var_tabla ||' set campo1 = '||''||'valor literal'||'';

SQL> r
1 declare
2 var_sql varchar2(1000);
3 var_tabla varchar2(1000) := 'TABLA1';
4 begin
5 var_sql := 'update '||var_tabla||' set campo1 = '||''||'ADFR5141'||''';
6 dbms_output.put_line(var_sql);
7* end;

update TABLA1 set campo1 = 'ADFR5141'; –> Funcionaría sin inconvenientes

Por lo que se ve es demasiado engorroso, ahora imaginanse coloca un formato de fecha dentro de ese enredo , con un to_char , ¿se enredaría mas cierto?

Pues bien, esto se soluciona en gran medida en Oracle10g, con una utilidad genial ,simplemente todo queda inscrito dentro de q'[…..]'

Inclusive, todo puede quedar inscrito dentro de cualquiera de estos símbolos

!
[ ]
{ }
( )
< >

O sea, nuestro pequeño update dinámico quedaría

var_sql := 'update '|| var_tabla ||' set campo1 = q'[ 'valor literal' ]';

Acaso no se ve más sencillo , mmmmm , claro que sí !!!!

by Ligarius
17.05.10. 14:33:15. 329 words, 8467 views. Categories: Sql*Plus ,