Ciągle o tym zapominam i wracam do tego! Myślę, że najlepszą odpowiedzią jest połączenie odpowiedzi udzielonych do tej pory.
Po pierwsze, &jest prefiksem zmiennej w sqlplus/sqldeveloper, stąd problem - kiedy się pojawia, oczekuje się, że jest częścią nazwy zmiennej.
SET DEFINE OFF zatrzyma interpretację sqlplus iw ten sposób.
Ale co, jeśli musisz użyć zmiennych sqlplus i literał i znaki?
- Musisz ustawić DEFINE ON, aby zmienne działały
- I SET ESCAPE ON, aby uniknąć użycia &.
np.
set define on
set escape on
define myvar=/forth
select 'back\\ \& &myvar' as swing from dual;
Produkuje:
old 1: select 'back\\ \& &myvar' from dual
new 1: select 'back\ & /forth' from dual
SWING
--------------
back\ & /forth
Jeśli chcesz użyć innego znaku ucieczki:
set define on
set escape '#'
define myvar=/forth
select 'back\ #& &myvar' as swing from dual;
Po ustawieniu określonego znaku zmiany znaczenia może zostać wyświetlony komunikat „SP2-0272:znak zmiany znaczenia nie może być alfanumeryczny ani odstępem”. To prawdopodobnie oznacza, że masz już zdefiniowany znak ucieczki i rzeczy stają się strasznie samoodnoszące. Czysty sposób na uniknięcie tego problemu polega na pierwszym uruchomieniu ucieczki:
set escape off
set escape '#'