S'échapper de devis unique en PLSQL

Je veux PLSQL pour générer des chaînes de caractères comme:

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

Ma solution est la suivante:

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;

De sortie est OK quand il ne contient pas seul qoutes dans rec.description. Sinon, il y a besoin pour échapper à la lettre. Comment dois-je mettre en œuvre?

OK sortie de ligne (C'est a échapper à la lettre afin de préserver unique qoute):

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

PAS NOK ligne de sortie car pas d'échapper à la lettre pour une seule citation ajoutée et ne compile pas:

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

Ma solution n'est pas de vérifier si la description contient des guillemets simples. Je viens de remplacer la source (description) de la colonne de devis unique par deux guillemets simples avant de générer COMMENT ON chaînes et puis je ROLLBACK.

Une meilleure solution?

  • Remplacer l'apostrophe avec une double on est bien. Quel est le point de ROLLBACK? Pourriez-vous s'il vous plaît poster tout le code (à remplacer et restauration)?
  • il a probablement des mises à jour de la description_table, et puis des restaurations de la mise à jour
InformationsquelleAutor reforrer | 2011-07-13