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

PPC*_*PCC 1 sql database oracle

我是 Oracle SQL 的新手。我遇到了以下声明:

CREATE TABLE &&DATABASE_ONE..TABLE_ONE(...);
Run Code Online (Sandbox Code Playgroud)

上面的语句试图创建一个表。我不确定我是否对..和有正确的理解&&

我已经做了一些谷歌搜索,我发现这个链接说 double dot(..) 将选择default schema查询。
DATABASE_ONE应该是模式名,TABLE_ONE应该是表名。

&&对在数据库名称前使用感到困惑。谷歌搜索后,我发现一些帖子说这&&意味着"Oracle will prompt the user for a value and will create a permanent variable".

有人可以解释一下&&上面的语句是如何工作的吗?如果我有任何误解,请纠正我。

Ale*_*ole 5

@Gary_W 已经介绍了单和双 & 号之间的区别。

双周期可能不太明显。来自SQL*Plus 文档

如果您希望在替换变量后立即附加字符,请使用句点将变量与字符分开。

如果你有一个时期:

&&DATABASE_ONE.TABLE_ONE
Run Code Online (Sandbox Code Playgroud)

那么该句点将被视为替代变量名称的终止符,并在该过程中被消耗。假设您输入的值是“HR”;替换将是:

old:select &&DATABASE_ONE.TABLE_ONE from dual
new:select HRTABLE_ONE from dual

select HRTABLE_ONE from dual
Run Code Online (Sandbox Code Playgroud)

如您所见,现在模式和表名之间没有句点,为您提供了一个不代表您想要的组合标识符。

使用表格,您有:

&&DATABASE_ONE..TABLE_ONE
Run Code Online (Sandbox Code Playgroud)

第二个时期是位于这两个元素之间的“正常”时期;一旦第一个被替换消耗掉,第二个仍然履行该功能:

old:select &&DATABASE_ONE..TABLE_ONE from dual
new:select HR.TABLE_ONE from dual

select HR.TABLE_ONE from dual
Run Code Online (Sandbox Code Playgroud)