谁能告诉我在哪里列出了绑定变量名称允许的字符?我花了几个小时钻研Oracle SQL文档,但一无所获。
我指的是以下内容中的":id“:
SELECT * FROM mytable WHERE id = :id例如,点可以像":some.id“一样在那里使用吗?它的功能会和没有点的版本完全一样吗?
发布于 2012-04-17 05:47:25
这两页状态绑定变量必须是“合法的Oracle标识符”我找到的文档并没有明确说明点可以是合法标识符的一部分。我可以在表名和绑定变量名中都使用点,但看起来不推荐这样做。
具有绑定变量命名约定的页面(这些页面声明绑定变量必须是合法标识符):
http://www.utoug.org/i/doc/concept_bind_var.htm
http://docs.oracle.com/cd/E23903_01/doc.41/e21674/concept_ses_val.htm#BEIEGCCC
描述合法标识符的页面:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements008.htm
除了DB链接之外,我在这个页面上找不到任何说明点是标识符(例如,表或绑定变量名)的合法部分的内容。尽管$和#是合法的,但它们甚至不被推荐,所以“。可能行得通,但显然不被推荐(在此页面上甚至没有提到合法)
绑定变量名必须与项名称相对应。绑定变量名不区分大小写。绑定变量名不能超过30个字符(即它们必须是有效的Oracle标识符)。
我知道有效的ORACLE标识(基于ORACLE对合法标识符的定义)不能以数字开头,可以包含一些特殊字符,如$和。但是,如果有特殊字符,则标识符必须用双引号引起来。
我可以在绑定变量中使用带点的标识符,但当绑定变量中有点时,我必须在绑定变量两边加上双引号。
create or replace function F0416B
RETURN VARCHAR2
is
V_STMT VARCHAR2(1999);
V_RESULT VARCHAR2(1999);
BEGIN
V_STMT := 'INSERT INTO TEST0411(FIELD1, FIELD2) VALUES ( :"A.1" , :"A.2")';
EXECUTE IMMEDIATE V_STMT USING 'AS201', 'AS202';
RETURN 'INSERT-OK';
COMMIT;
EXCEPTION
WHEN OTHERS THEN RETURN SQLERRM;
END; #这可能会起作用,但根据上面的文档,绑定变量或其他对象名称中的句点/点是不合法的/建议...
#这是ORACLE模式对象命名页上的句子,它告诉我:
未加引号的标识符只能包含数据库字符集中的字母数字字符以及下划线(_)、美元符号($)和井号(#)。数据库链接还可以包含句点(.)和"at“符号(@)。Oracle强烈建议您不要在不带引号的标识符中使用$和#。
发布于 2012-07-20 04:55:07
我也很难找到这方面的官方Oracle文档:http://docs.oracle.com/cd/E14072_01/appdev.112/e10646/oci04sql.htm#i420655
最重要的是,您可以引用占位符(:"_normallyinvalid"),然后前面链接中列出的大多数规则都不再相关。我找不到任何甲骨文文档提供这个建议;只是在互联网上提供了一些提示。
https://stackoverflow.com/questions/7752632
复制相似问题