23. Mai 2007

Quote-Zeichen in PL/SQL ...

Heute mal ein kleiner Tipp für's SQL und PL/SQL-Programmieren. Man schreibt PL/SQL-Code, welcher SQL zurückliefern soll...
declare
  v_sql varchar2(32767);
begin
  v_sql := 'select ''Hallo Welt'' from dual';
end;
Ein Hochkomma wird durch ein zweites maskiert: So weit - so gut. Vielleicht ein wenig unübersichtlich ... Aber richtig übel wird's, wenn das PL/SQL ein PL/SQL erzeugen soll, welches ein SQL erzeugen soll ... ... und das ist in der Praxis gar nicht so unüblich ...
declare
v_sql varchar2(32767);
begin
v_sql := 'declare ' ||
         '  v_sql varchar2(32767); ' ||
           'begin '   ||
           '  v_sql := ''select ''''Hallo Welt'''' from dual'''||
           ' end;';
end;
Dann muss der Apostroph schon viermal verwendet werden, damit alles richtig maskiert ist. Und wenn der Code umfangreicher wird und man irgendwo ein Hochkomma vergessen hat ... ... tja, dann geht die Fehlersuche los! Ab Oracle10g ist das aber auch einfacher möglich: Zuerst das noch einfache Beispiel:
declare
 v_sql varchar2(32767);
begin
 v_sql := q'#select 'Hallo Welt' from dual#';
end;
q'# bedeutet, dass von nun an '# das neue Quote-Zeichen ist. Hochkommata werden bis zum nächsten #' nicht mehr als Quote-Zeichen interpretiert. Interessant ist dies natürlich vor allem für den zweiten Fall, denn es muss ja nicht '# verwendet werden, anstelle des # sind alle anderen Zeichen ebenfalls möglich ...
declare
  v_sql varchar2(32767);
begin
  v_sql := q'#declare #' ||
           q'#  v_sql varchar2(32767); #' ||
           q'#begin   #' ||
           q'#  v_sql := q'{select q'[Hallo Welt]' from dual}'#' || 
           q'# end;#';
end;
Das ist schon wesentlich leichter handzuhaben als die vielen Hochkommata ... Die neuen Quote-Zeichen sind einfach nur wärmstens zu empfehlen ...

Keine Kommentare:

Beliebte Postings