2010-05-07 73 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))。

好運。