| « 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í !!!!
![]()
![]()
17.05.10. 14:33:15. 329 words, 2362 views. Categories: Sql*Plus , Leave a comment » • Send a trackback »
Trackback address for this post
Trackback URL (right click and copy shortcut/link location)