postgresql Oracle SQL代码中的^name_name和:name_name有什么区别?

b0zn9rqh  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(55)

这两个之间有什么区别?

alter table CDMM_CUST add constraint CDMM_CUSTM_EXTEN_UK unique (CUST_ID) using index TABLESPACE ^TS_INX;

alter table CDMM_CUST add constraint CDMM_CUSTM_EXTEN_UK unique (CUST_ID) using index TABLESPACE :TS_INX;

字符串
这是审查这两个声明所必需的吗?

alter table CDMM_CUST add constraint CDMM_CUSTM_EXTEN_UK unique (CUST_ID) using index TABLESPACE ^TS_INX;

alter table CDMM_CUST add constraint CDMM_CUSTM_EXTEN_UK unique (CUST_ID) using index TABLESPACE :TS_INX;


但是,^TS_INX和:TS_INX之间有什么区别?

u2nhd7ah

u2nhd7ah1#

也不是有效的SQL语句。
如果你运行它们,它们都会给出给予输出:

ORA-02216: tablespace name expected

字符串
fiddle
数据库对象名称和标识符文档指出:
1.不带引号的标识符必须以数据库字符集中的字母字符开始开始。带引号的标识符可以以任何字符开始开始。
1.非引号标识符只能包含数据库字符集中的字母数字字符以及下划线(_)、美元符号($)和磅号(#)。数据库链接还可以包含句点(.)和“at”符号(@)。Oracle强烈建议不要在非引号标识符中使用$和#。
带引号的标识符可以包含任何字符和标点符号以及空格。但是,带引号的标识符和不带引号的标识符都不能包含双引号或空字符(\0)。

  • ^TS_INX是无效的语法,因为它是一个未加引号的标识符,并且不以字母字符开头。
  • :TS_INX也是无效的语法,因为它是一个未加引号的标识符,并且不以字母字符开头。

:也被用来作为绑定变量的前缀;但是,在一个bind语句中指定一个绑定变量是无效的,所以它仍然是无效的。
这是审查这两个声明所必需的吗?
您的系统可能使用预处理器来解析和修改代码,然后再将其发送到数据库;如果是这样,则可能有一个或两个语句对于您的预处理器来说是有效的语法,并且预处理器将在将它们发送到数据库之前将它们转换为有效的SQL语句。
但是,如果只考虑在Oracle数据库的上下文中将它们作为SQL语句进行计算,那么这两个语句都是无效语法。

相关问题