tutorial terminado procedimiento hacer espaƱol developer bloque anonimo almacenados 11g oracle plsql

terminado - sp en oracle



Escapar una comilla simple en PLSQL (4)

Debe usar '''' en el código Pero antes de probarlo con el código real,

prueba la línea que tiene citas en el dual

Por ejemplo:

select ''''''sumesh'''''' from dual

Quiero que PLSQL genere cadenas como:

COMMENT ON COLUMN TABLE.COLUMN IS ''comment from database'';

Mi solución es:

declare str_comment varchar2(4000); begin for rec in (select table_name, column_name, description from description_table) loop str_comment:=''COMMENT ON COLUMN ''||rec.table_name||''.''||rec.column_name||'' IS ''''''||rec.description||''''''; '' ; dbms_output.put_line(str_comment); end loop; end;

La salida está bien cuando no contiene solo qoutes en rec.description . De lo contrario, hay necesidad de una carta de escape. ¿Cómo debería implementarlo?

Línea de salida OK (Tiene letra de escape para preservar qoute único):

COMMENT ON COLUMN TABLE1.COLUMN1_LV IS ''It''''s secret'';

NO NOK línea de salida porque no se ha agregado una carta de escape para una comilla simple y no se compila:

COMMENT ON COLUMN TABLE1.COLUMN1_LV IS ''It''s secret'';

Mi solución no es verificar si la descripción contiene comillas simples. Solo reemplazo la comilla simple de la columna de fuente (descripción) por dos comillas simples antes de generar COMMENT ON cadenas y luego ROLLBACK .

¿Alguna mejor solución?


Hago este tipo de cosas un poco (generalmente generando instrucciones de inserción / actualización).

Solo necesita usar la función de reemplazo para convertir todo en '''' into '''' . es decir, cámbialo a:

str_comment:=''COMMENT ON COLUMN ''||rec.table_name||''.''||rec.column_name ||'' IS ''''''||REPLACE( rec.description,'''''''','''''''''''')||''''''; '' ;


Puede usar el operador de Cotización como

str_comment:=''COMMENT ON COLUMN ''||rec.table_name||''.''||rec.column_name||'' IS q''''['' ||rec.description|| '']'''';'' ;

ver http://psoug.org/reference/string_func.html


Use la función REPLACE en su selección.

declare str_comment varchar2(4000); begin for rec in (SELECT table_name, column_name, REPLACE(description, '''''''', '''''''''''') FROM description_table) loop str_comment:=''COMMENT ON COLUMN '' || rec.table_name || ''.'' ||rec.column_name|| '' IS '''''' ||rec.description|| ''''''; '' ; dbms_output.put_line(str_comment); end loop; end;