oracle sql-使用双与号(&&)和双点(..)

时间:2018-12-11 16:25:49

标签: sql database oracle

我是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"

有人可以在上面的陈述中解释&&的工作方式吗?如果我有任何误会,请纠正我。

2 个答案:

答案 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