2

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

我使用的是 36 个字符的 ID。此错误仅在我的 asp.net webform 中的 sqldatasource 中引发。当我在Oracle sql developer.

我怎样才能解决这个问题?

4

4 回答 4

3

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

看到这个链接

于 2010-05-07T11:13:45.257 回答
2

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

正如 Srinivas 所指出的,最大长度是 30,因此 36 个字符的标识符不能在 SQL Developer 中工作——你可以发布在 SQL Developer 中“工作”的语句吗?

于 2010-05-07T11:38:42.137 回答
1

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

至于“为什么这是从 ASP.NET SqlDataSource 发生的”,我怀疑在某个地方在 ASCII 和 Unicode 之间转换存在问题。NVARCHAR2 是 Unicode,但我怀疑某些东西在 Unicode 世界中表现不佳。检查您的 Web 服务器、您的客户端、您的数据库,以及您能想到的任何东西 - 我怀疑您会发现其中的某个地方有一个 ASCII 客户端,它不能正确地使用 Unicode,并且正在混淆大约 Unicode 字符串的长度(32 个 Unicode 字符占用 64 个字节(假设 UTF-16))。

祝你好运。

于 2010-05-07T17:47:22.513 回答
1

SERVICE_ID NVARCHAR2(36) 非空

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

于 2010-05-07T14:28:52.363 回答