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 .