SQL> insert into temp_data(name, version) values ('A & P', 3);
Enter value for p: blah
old 1: insert into temp_data values ('A & P', 3)
new 1: insert into temp_data values ('A blah', 3)
1 row created.
col spoolfile new_value spoolfile
select '/tmp/logfile_'||to_char(sysdate,'yyyymmdd_HHMI') || '.txt' as spoolfile from dual;
spool &spoolfile
Bis hier ist es ok. Wie kann man jetzt ein '&' innerhalb eines Insert-Statements verwenden, obiges Statement funktioniert ja nicht? Man kann Oracle beibringen, dass es keine Variablen-Substitution machen soll. Dies geschieht über ein Set-Statement:
-- Ausschalten des Interpretierens von Variablennamen
-- Dadurch kann & innerhalb von SQL-Statements angegeben werden
set define off
SELECT * FROM testtab WHERE textfeld LIKE '%20@%%' ESCAPE '@';
Hiermit würde man alle Felder finden, in denen die Zeichenkette "20%" vorkommt, egal ob am Anfang oder mittendrin oder am Ende.
Das funktioniert nur leider eben nicht für Insert-Statements:
SQL> insert into temp_data(name,version) values ('A @& P' ESCAPE '@', 3);
Enter value for p: blah
old 1: insert into temp_data values ('A & P', 3)
new 1: insert into temp_data values ('A blah', 3)
1 row created.
col version new_value version
select versionsnr into version from versionstabelle where status='aktiv';
SQL> insert into temp_data(name,version) values ('A & P', &version);
Enter value for p: blah
old 1: insert into temp_data values ('A & P', &version)
new 1: insert into temp_data values ('A blah', 3)
1 row created.
col version new_value version
select versionsnr into version from versionstabelle where status='aktiv';
SQL> insert into temp_data(name,version) values ('A &'||' P', &version);
old 1: insert into temp_data values ('A & P', &version)
new 1: insert into temp_data values ('A & P', 3)
1 row created.
Disclaimer: alle obigen SQL-Statements sind aus meiner Erinnerung abgetippt. Sie sind evtl. nicht ganz syntaktisch korrekt, aber ich hab zuhause halt keine Oracle laufen und so muß ich mein Gedächtnis bemühen.
Ein Dank geht an "The Oracle (tm) Users' Co-Operative FAQ"

Zu klären wäre noch die Syntax, wenn das & ganz am Schluss einzufügen ist. Etwa so?
....'bla-di-bla&'||''
Auf sowas kommt man tatsächlich nicht einfach so.
SET define OFF
SET verify OFF
set define off schaltet global die Interpretation der Variablen aus und das war nicht gewünscht.
Was set verify macht, entzieht sich mir gerade, da ich momentan kein Oracle einsetze und nicht nachschauen kann.
set escape \
insert into temp_data values ('A \& P', &version)
und das ist mE auch dokumentiert