首页 > 解决方案 > oracle sql - 使用双与号 (&&) 和双点 (..)

问题描述

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

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

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

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

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

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

标签: sqldatabaseoracle

解决方案


@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

推荐阅读