2010-05-07 74 views
2

我收到标题中提到的错误。ora-00972标识符太长oracle 10g

我正在使用36字符标识。这个错误只在我的asp.net webform的sqldatasource中抛出。 当我在Oracle sql developer中执行更新时,这不是问题。

我该如何解决这个问题?

回答

3

Oracle支持最多30个字符的标识符,并且您的标识符长度36大于该值,因此使其长度为30个字符。

看到这个link

+0

我读到了,但正如我所说我能够从Oracle SQL开发人员更新而不会出现该错误? – Frank 2010-05-07 11:23:45

2

如果你成功地从另一种环境中执行的DML(UPDATE表名SET ...),如SQL开发人员,那么你的asp.net代码必须以某种方式指定或构建表的名称或表格的列名称不正确。如果Oracle在任何其他检查之前将它们解析为> 30个字符,它将抛出此异常。

正如Srinivas指出的那样,最大长度是30,所以36个字符的标识符不能从SQL Developer工作 - 您能发布SQL Developer中“工作”的语句吗?

+0

插入SERVICE(SERVICE_ID)值('03eb2491-9145-414f-8bdb-c5827a74151c');并且该字段是SERVICE_ID NVARCHAR2(36)NOT NULL – Frank 2010-05-07 12:00:56

+0

我很困惑 - 如果您得到00972错误,它引用表名称(SERVICE)或列名称(SERVICE_ID)。你插入的DATA的长度异常将导致ORA-12899:对于列来说值太大。你的asp.net层中是否有错误陷阱,可能会误识别实际异常? – dpbradley 2010-05-07 15:22:14

1

SERVICE_ID NVARCHAR2(36)NOT NULL

配置为使用多字节字符您的SQL Developer设置?疯狂的猜测,特别是因为我期望抛出ORA-12899: value too large for column而不是ORA-00972。

1

啊,我明白了 - 它不是那个长度为36个字符的列名,而是实际的数据。很高兴我们清除了一个。关于“为什么这是从ASP.NET SqlDataSource发生的”,我怀疑在这个行的某处有一个在ASCII和Unicode之间转换的问题。 NVARCHAR2是Unicode,但我怀疑某些东西在Unicode世界中播放不好。看看你的网络服务器,你的客户端,你的数据库,任何你能想到的东西 - 我怀疑你会发现在那里有一个ASCII客户端,不会正确地说Unicode,而且会混淆关于Unicode字符串的长度(32个Unicode字符占用64个字节(假设UTF-16))。

好运。