@ Gary_W покрыл разницу между одинарным и двойным амперсандом .
Двойной период, возможно, немного менее очевиден.Из документации SQL * Plus :
Если вы хотите добавить символы сразу после переменной подстановки, используйте точку для отделения переменной от символа.
Если бы у вас был один период:
&&DATABASE_ONE.TABLE_ONE
, то этот период будет рассматриваться как терминатор для имени переменной замещения и будет использоваться в процессе.Скажите, что вы ввели значение «HR»;подстановка будет выглядеть следующим образом:
old:select &&DATABASE_ONE.TABLE_ONE from dual
new:select HRTABLE_ONE from dual
select HRTABLE_ONE from dual
Как видите, между схемой и именами таблиц теперь нет точки, что дает вам комбинированный идентификатор, который не будет представлять то, что вы хотели.
С формой у вас есть:
&&DATABASE_ONE..TABLE_ONE
второй период является «нормальным» периодом, который находится между этими двумя элементами;как только первый из них будет использован заменой, второй остается для выполнения этой функции:
old:select &&DATABASE_ONE..TABLE_ONE from dual
new:select HR.TABLE_ONE from dual
select HR.TABLE_ONE from dual