oracle sql - использование двойного амперсанда (&&) и двойной точки (..) - PullRequest
0 голосов
/ 11 декабря 2018

Я новичок в Oracle SQL.Я наткнулся на следующее утверждение:

CREATE TABLE &&DATABASE_ONE..TABLE_ONE(...);

Вышеприведенное утверждение пытается создать таблицу.Я не уверен, что у меня есть правильное понимание по .. и &&.

. Я провел поиск в Google, я обнаружил эту ссылку , которая говорит двойную точку (..)выберет default schema для запроса.
DATABASE_ONE должно быть именем схемы, а TABLE_ONE должно быть именем таблицы.

Я запутался в использовании && передимя базы данных.После поиска в Google я обнаружил, что в некоторых сообщениях говорится, что && означает "Oracle will prompt the user for a value and will create a permanent variable".

Может ли кто-нибудь объяснить, как работает && в приведенном выше утверждении?Пожалуйста, поправьте меня, если у меня возникло недопонимание.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

@ 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
0 голосов
/ 11 декабря 2018

Двойной амперсанд будет запрашивать один раз и везде, что переменная используется, он будет использовать то, что было введено.Если бы у него был только один амперсанд, вы получите подсказку для каждого случая.

Попробуйте сами, создав фиктивный скрипт с несколькими подсказками для одной и той же переменной.Сначала используйте одиночные амперсанды, обратите внимание, как это работает, затем переключитесь на двойные амперсанды.

Эта ссылка имеет хорошее объяснение: https://www.oreilly.com/library/view/oracle-sqlplus-the/1565925785/ch04s02.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...