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

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

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

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

【问题讨论】:

    标签: sql database oracle


    【解决方案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#。现在,我对这样做感到“沮丧”:(
      • 我认为这会暗示这些字符可能会在未来版本的软件中被弃用,你不觉得吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 2013-01-02
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多