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
Vous devez vous connecter pour publier un commentaire.
Je fais ce genre de trucs un peu juste (généralement de générer insert/update).
Vous suffit d'utiliser la fonction de remplacement à tourner tous les
'
en''
. c'est à dire à le Modifier:Vous pouvez utiliser la Citation de l'opérateur comme
voir http://psoug.org/reference/string_func.html
]'
.SELECT q'{{test}{from}}' FROM dual;
ce retourne:{test}{from}
}'
(citation de caractères suivie d'une apostrophe)'
... d'oh!Utiliser le
REPLACE
fonction de votre sélection.Vous devez utiliser " dans le code
Mais Avant de l'essayer pour le code ,
essayez la ligne qui a des guillemets dans le double
Par exemple: