我是Oracle SQL的新手。我遇到以下声明:
CREATE TABLE &&DATABASE_ONE..TABLE_ONE(...);
上面的语句试图创建一个表。我不确定对..
和&&
的理解是否正确。
我已经完成了一些Google搜索,发现这个link表示双点(..)将选择default schema
进行查询。
DATABASE_ONE
应该是架构名称,TABLE_ONE
应该是表名称。
我对在数据库名称前面使用&&
感到困惑。谷歌搜索后,我发现一些帖子说&&
的意思是"Oracle will prompt the user for a value and will create a permanent variable"
。
有人可以在上面的陈述中解释&&
的工作方式吗?如果我有任何误会,请纠正我。
答案 0 :(得分:3)
@Gary_W已涵盖a single and a double ampersand之间的区别。
双重时期也许不太明显。来自the SQL*Plus documentation:
如果希望在替换变量后立即附加字符,请使用句点将变量与字符分开。
如果您有一个期间:
&&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
答案 1 :(得分:2)
双“&”号将在所有使用该变量的地方提示一次,它将使用输入的内容。如果只有一个“&”号,则每次出现时都会提示您。
您可以尝试自己创建一个虚拟脚本,该脚本具有针对同一变量的多个提示。首先使用单“&”号,注意其工作原理,然后切换到双“&”号。
此链接有一个很好的解释:https://www.oreilly.com/library/view/oracle-sqlplus-the/1565925785/ch04s02.html