Oracle绑定param占位符允许哪些字符?

时间:2011-10-13 10:18:28

标签: sql database oracle parameters

有人可以请指出列出绑定变量名称所允许的字符的位置吗?我花了几个小时挖掘Oracle SQL文档无济于事。

我的意思是“:id”如下:

SELECT * FROM mytable WHERE id = :id

E.g。可以在那里使用点像“:some.id”吗?它的功能是否与没有点的版本完全相同?

2 个答案:

答案 0 :(得分:2)

这些页面的状态绑定变量必须是"合法的Oracle标识符" 我发现的文档并没有特别说明点可以 成为合法身份的一部分。我能够在两者中使用一个点 表名和绑定变量名,但它看起来像 不推荐。

有可变名称约定的页面 (这些页面声明绑定变量必须是合法标识符):

http://www.utoug.org/i/doc/concept_bind_var.htm

http://docs.oracle.com/cd/E23903_01/doc/doc.41/e21674/concept_ses_val.htm#BEIEGCCC

描述法律身份的页面: http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements008.htm

我在这个页面上找不到任何说明点是合法的东西 标识符的一部分(E.G.表或绑定变量名称),DB链接除外。 即使$和#是合法的,它们甚至都不推荐,所以"。" 可能有效,但显然不推荐(甚至没有被提及为合法的 这个页面)

绑定变量名称必须与项目名称相对应。 绑定变量名称不区分大小写。 绑定变量名称不能超过30个字符(也就是说,它们必须是有效的Oracle标识符)。

我知道有效的ORACLE标识符(基于ORACLE的定义) 一个合法的标识符)不能以数字开头, 并且可以有一些像$和。这样的特殊字符。但如果有的话 标识符必须是双引号的特殊字符。

我能够获得带有点的标识符以在绑定中工作 变量,但我必须在绑定周围加上双引号 当bind变量中有一个点时变量。

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强烈建议您不要在非加引号标识符中使用$和#。

答案 1 :(得分:0)

我也很难找到官方的Oracle文档:http://docs.oracle.com/cd/E14072_01/appdev.112/e10646/oci04sql.htm#i420655

最重要的是,事实证明你可以引用占位符(:“_ normalinvalid”),然后前面链接中列出的大部分规则都不再相关。我找不到任何提供此建议的Oracle文档;只是在互联网上提示。