Problem polega na tym, że SQL*Plus traktuje cały ciąg znaków po &
, aż do następnej spacji lub znaku podobnego, jako nazwy zmiennej podstawienia. Oczywiście nie tego chcesz tutaj.
Na szczęście pomyśleli o tym i możesz oznaczyć koniec nazwy zmiennej za pomocą .
:
FROM &3._TABLE
(Przynajmniej to działa w przypadku zmiennych nazwanych i jestem prawie pewien, że zadziała w przypadku zmiennych pozycyjnych... jeśli nie, musisz zdefiniować nową zmienną ustawioną na &3
jako obejście).
Znajduje się w dokumentacji , ale mrugnij, a przegapisz:
Istnieje powiązany efekt, o którym warto pamiętać na przyszłość. Jeśli następnym znakiem po zmiennej podstawienia jest .
tak czy inaczej - między schematem a tabelą lub na przykład między tabelą a kolumną - zostanie to zinterpretowane jako terminator podstawienia. Załóżmy, że przekazujesz schemat osobno jako &4
, z wartością 'scott'
; to:
FROM &4.&3._TABLE
wygląda rozsądnie, ale zostanie zastąpiony jako scottdev_TABLE
, który nie zostanie rozpoznany. Więc w takim przypadku musisz mieć dodatkowy:
FROM &4..&3._TABLE
który zostałby zastąpiony jako scott.dev_TABLE
.