有人可以请指出列出绑定变量名称所允许的字符的位置吗?我花了几个小时挖掘Oracle SQL文档无济于事。
我的意思是“:id”如下:
SELECT * FROM mytable WHERE id = :id
E.g。可以在那里使用点像“:some.id”吗?它的功能是否与没有点的版本完全相同?
答案 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;
不合法/推荐......
不带引号的标识符只能包含数据库字符集和下划线(_),美元符号($)和井号(#)中的字母数字字符。数据库链接还可以包含句点(。)和" at"标志(@)。 Oracle强烈建议您不要在非加引号标识符中使用$和#。
答案 1 :(得分:0)
我也很难找到官方的Oracle文档:http://docs.oracle.com/cd/E14072_01/appdev.112/e10646/oci04sql.htm#i420655
最重要的是,事实证明你可以引用占位符(:“_ normalinvalid”),然后前面链接中列出的大部分规则都不再相关。我找不到任何提供此建议的Oracle文档;只是在互联网上提示。