sql update auf Feld, welches SQL enthält

apisto

Neuer Benutzer
Beiträge
3
Moin zusammen,
im Zusammenhang mit SQL und Oracle habe ich eine Frage und hoffe hier von Euch einen Tipp zu bekommen:

Es geht um eine Tabelle/Feld, welches ich verändern möchte. Das Feld ist VARCHAR2(3500) definiert und enthält selbst SQL-Statements. Ich nenne es mal SQL-TAB/SQL-FELD.

Das Problem: wenn ich darin einen Feldinhalt wie : select * from anytab where feld1 = 'ABX' mittels update verändern möchte in select * from anytab where feld1 in ('ABX','XDF','HGa') , dann müsste ich ein update-Statement formulieren, welches selbst in Hochkomma gekleidet ist.
update SQL-TAB set SQL-FELD = ' select * from anytab where feld1 in ('ABX','XDF','HGa')' …
Gibt es vielleicht eine Oracle Umgebungsvariable, mit der ich die Kennzeichnung "String" kurzfristig für dieses Update-Statement ändern könnte, z.B. in " ?
Dann sähe mein update aus wie folgt: update SQL-TAB set SQL-FELD = "select * from anytab where feld1 in ('ABX','XDF','HGa')" … oder hat jemand eine andere Idee?

Besten Gruß in die Runde,
Jens
 
Werbung:
in PostgreSQL kannst Du dafür Dollar-Quoting nehmen:

Code:
edb=*> select * from apisto ;
                    sql                     
--------------------------------------------
  select * from anytab where feld1 = 'ABX'
(1 row)

edb=*> update apisto set sql = $$select * from anytab where feld1 in ('ABX','XDF','HGa')$$;
UPDATE 1
edb=*> select * from apisto ;
                           sql                           
---------------------------------------------------------
 select * from anytab where feld1 in ('ABX','XDF','HGa')
(1 row)

edb=*>

Du kannst auch was zwischen die Dollarzeichen schreiben:

Code:
edb=*> update apisto set sql = $PostgreSQL$select * from anytab where feld1 in ('foo','bar','batz')$PostgreSQL$;
UPDATE 1
edb=*> select * from apisto ;
                           sql                           
----------------------------------------------------------
 select * from anytab where feld1 in ('foo','bar','batz')
(1 row)

edb=*>
 
Oracle spielt da leider nicht mit. Das "$" betrachtet Oracle als "invalid character". Daher war ja schon mein erster Ansatz, das Hochkomma mittels Umgebungsvariable umzuschießen. Nur: ich kenne keine solche Umgebungsvariable.
Auch wenn ich mit replace-Funktion dran gehe, komme ich um das Hochkomma nicht drum herum.
Aber danke für den Ansatz mit PostgreSQL.
 
In SQL werden Anführungszeichen werden durch duplizieren "escaped":

Code:
update foo
   set bar = 'Ein '' in der Mitte';

Das Äquivalent zu "Dollar Quoting in Postgres' ist die Verwendung von q'[...]'

Code:
update foo
   set bar =q'[Ein ' in der Mitte]'
 
Werbung:
Hallo und besten Dank,
diese Möglichkeit war mir nicht bekannt. Antwort trifft den Sachverhalt voll !

Mit Gruß von der Küste,
Jens
 
Zurück
Oben