ora-00972标识符太长了oracle 10g

时间:2010-05-07 11:09:19

标签: c# asp.net oracle gridview sqldatasource

我收到了标题中提到的错误。

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

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

Oracle支持最多30个字符的标识符,标识符长度36大于该标识符。所以它的长度为30个字符。

请参阅此link

答案 1 :(得分:2)

如果从其他环境(如SQL Developer)成功执行DML(UPDATE tableName SET ...),那么您的asp.net代码必须以某种方式指定或构造表的名称或表的列名错误。如果在任何其他检查之前将Oracle中的任何一个解析为> 30个字符,Oracle将抛出此异常。

正如Srinivas指出的那样,最大长度为30,因此SQL Developer无法使用36个字符的标识符 - 你能在SQL Developer中发布“工作”的语句吗?

答案 2 :(得分:1)

  

SERVICE_ID NVARCHAR2(36)NOT NULL

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

答案 3 :(得分:1)

啊,我明白了 - 这不是36个字符长的列名,而是实际数据。很高兴我们清理了那个。

至于“为什么这是从ASP.NET SqlDataSource发生的”,我怀疑在某些地方有一个转换ASCII和Unicode之间的问题。 NVARCHAR2是Unicode,但我怀疑在Unicode世界中有些东西不能很好地播放。看看你的网络服务器,你的客户,你的数据库,你能想到的任何东西 - 我怀疑你会发现那里的某个地方有一个ASCII客户端在那里没有正确地谈论Unicode,并且正在混淆关于Unicode字符串的长度(32个Unicode字符占用64个字节(假设为UTF-16))。

祝你好运。