Frage PL / SQL, wie man ein einzelnes Anführungszeichen in einer Zeichenkette entkommt?


In Oracle PL / SQL, wie man einzelnes Anführungszeichen in einer Zeichenkette entkommt? 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;
/

75
2017-07-03 16:36


Ursprung


Antworten:


Sie können literale Zitate verwenden:

stmt := q'[insert into MY_TBL (Col) values('ER0002')]';

Dokumentation für Literale kann hier gefunden werden.

Alternativ können Sie zwei Anführungszeichen verwenden, um ein einzelnes Zitat zu bezeichnen:

stmt := 'insert into MY_TBL (Col) values(''ER0002'')';

Der literale Zitatmechanismus mit der Q-Syntax ist flexibler und lesbarer, IMO.


133
2017-07-03 16:38



Hier ist ein Blogeintrag das sollte helfen, Ticks in Strings zu entkommen.

Hier ist die einfachste Methode aus dem Post:

Die einfachste und am häufigsten verwendete Methode ist die Verwendung eines einfachen Anführungszeichens mit zwei einzelnen> Anführungszeichen auf beiden Seiten.

WÄHLEN Sie 'test single quote' '' aus dual;

Die Ausgabe der obigen Aussage wäre:

Einzeltest testen '

Sie müssen lediglich ein zusätzliches Anführungszeichen eingeben, um ein einzelnes Anführungszeichen zu drucken. Das heißt, wenn Sie zwei einfache Anführungszeichen setzen, wird Oracle eins drucken. Die erste> eine wirkt wie ein Escape-Zeichen.

Dies ist die einfachste Möglichkeit, einfache Anführungszeichen in Oracle zu drucken. Es wird jedoch> komplex, wenn Sie statt nur einer eine Reihe von Anführungszeichen drucken müssen. In dieser Situation funktioniert die folgende Methode gut. Aber es erfordert etwas mehr Schreibarbeit.


13
2017-07-03 18:37



Zusätzlich zu DCookies Antwort oben können Sie auch chr (39) für ein einfaches Zitat verwenden.

Ich finde das besonders nützlich, wenn ich eine Anzahl von Einfüge / Aktualisierungsanweisungen erstellen muss, die auf einer großen Menge vorhandener Daten basieren.

Hier ist ein sehr einfaches Beispiel:

Select 'UPDATE Customers SET LName = ' || chr(39) || 'Doe' || chr(39) || ';' From dual;

4
2018-02-09 05:39



Setzen Sie einfach die folgende Aussage vor das FOR:

set escape '\';

-4
2017-11-07 19:27