Wie kann in Oracle PL / SQL ein einfaches Anführungszeichen in einer Zeichenfolge vermieden werden? Ich habe es so versucht, es funktioniert nicht.
declare
stmt varchar2(2000);
begin
for i in 1021 .. 6020
loop
stmt := 'insert into MY_TBL (Col) values(\'ER0002\')';
dbms_output.put_line(stmt);
execute immediate stmt;
commit;
end loop;
exception
when others then
rollback;
dbms_output.put_line(sqlerrm);
end;
/
Antworten:
Sie können wörtliche Anführungszeichen verwenden:
Dokumentation für Literale finden Sie hier .
Alternativ können Sie zwei Anführungszeichen verwenden, um ein einzelnes Anführungszeichen zu kennzeichnen:
Der wörtliche Anführungszeichenmechanismus mit der Q-Syntax ist flexibler und lesbarer, IMO.
quelle
Hier ist ein Blog-Beitrag , der helfen soll, Zecken in Strings zu entkommen.
Hier ist die einfachste Methode aus diesem Beitrag:
quelle
Zusätzlich zu der obigen Antwort von DCookie können Sie auch chr (39) für ein einfaches Anführungszeichen verwenden.
Ich finde dies besonders nützlich, wenn ich eine Reihe von Einfüge- / Aktualisierungsanweisungen erstellen muss, die auf einer großen Menge vorhandener Daten basieren.
Hier ist ein sehr schnelles Beispiel:
Nehmen wir an, wir haben eine sehr einfache Tabelle, Customers, mit zwei Spalten, FirstName und LastName. Wir müssen die Daten in Customers2 verschieben, also müssen wir eine Reihe von INSERT-Anweisungen generieren.
Ich habe festgestellt, dass dies sehr nützlich ist, wenn Daten von einer Umgebung in eine andere verschoben werden oder wenn eine Umgebung schnell wiederhergestellt wird.
quelle
EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(''ER0002'')'
;; arbeitete für mich. Das Schließen desvarchar
/string
mit zwei Paaren einfacher Anführungszeichen hat den Trick getan. Eine andere Option könnte die Verwendung einesusing
Schlüsselworts seinEXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(:text_string)' using 'ER0002'
. Denkenusing
Sie daran, dass das Schlüsselwort nicht funktioniert, wenn SieEXECUTE IMMEDIATE
DDLs mit Parametern ausführen. Die Verwendung von Anführungszeichen funktioniert jedoch für DDLs.quelle