pl/sql 美元运算符?

Posted

技术标签:

【中文标题】pl/sql 美元运算符?【英文标题】:pl/sql dollar operator? 【发布时间】:2008-09-29 23:34:37 【问题描述】:

今天早上我在一个pl/sql脚本中遇到了以下ddl:

创建索引 genuser.idx$$_0bdd0011 ...

我最初的想法是索引名称是由工具生成的……但我也不是 pl/sql 超级明星,所以我很可能是不正确的。双美元符号在这个语句中有什么特殊意义吗?

【问题讨论】:

【参考方案1】:

没有特殊意义或意义。

SQL> create table t (col number)
  2  /

Table created.

SQL> create index idx$$_0bdd0011 on t(col)
  2  /

Index created.

注意:CREATE INDEX 是一个 DDL 语句,通常在 SQL 脚本中执行,而不是在 PL/SQL 中。

【讨论】:

【参考方案2】:

您最初的想法似乎是正确的。这看起来是由工具生成的索引名称(但不是由 Oracle 分配,因为未指定索引名称)。美元符号除了是人类开发人员很少使用的有效符号之外没有任何特殊含义,因此可以方便地降低系统生成的名称与人类生成的名称发生冲突的风险。

【讨论】:

我认为 0bdd0011 可以解决这个问题。【参考方案3】:

不管他的名字来自哪里,这都与 Oracle 的书面建议相反:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements008.htm#SQLRF00223

Oracle 强烈建议您不要在非引号标识符中使用 $ 和 #

【讨论】:

这是什么意思? “强烈劝阻”?哦,你最好不要这样做,或者,或者......或者......我真的会生气。见鬼 是的,这并不等同于“$ 和 # 在非引号分隔符中不受支持”。就我个人而言,我总是喜欢将表的主键列命名为 MY_TABLE#。现在,我对这样做感到“沮丧”:( 我认为这会暗示这些字符可能会在未来版本的软件中被弃用,你不觉得吗?

以上是关于pl/sql 美元运算符?的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL运算符及优先级 | 条件控制 | 循环控制

PL/SQL 插入使用多个选择和减号运算符

在 pl/sql 块中使用 OR 运算符匹配行中的值

Oracle Pl/SQL 中用户定义运算符背后的动机

=> 在 oracle pl sql.is 和调用运算符中是啥意思?

数据库小技能:PL/SQL(Procedure Language/SQL,过程化SQL语言)预备知识