OracleClient.OracleType.RowId的怪問題><

  • 2004
  • 0
  • 2012-04-20

OracleClient.OracleType.RowId的怪問題><

Dotblogs 的標籤: ,

DotNet 3.5,如下的程式:

   1: Dim m_ocmCmd As New Data.OracleClient.OracleCommand
   2: m_ocmCmd.Parameters.Clear()
   3: m_ocmCmd.CommandText = "INSERT INTO FOO SELECT * FROM FOO WHERE ROWID=:V_CURR_REC "
   4: m_ocmCmd.Parameters.Add(":V_CURR_REC", OracleClient.OracleType.RowId).Value = V_CURR_REC
   5: m_ocmCmd.ExecuteNonQuery()

在 Dev DB 可正常執行,在 SIT DB 就死掉,會出現如下的錯誤:


System.Data.OracleClient.OracleException: ORA-01461: 只有在將值插入資料類型為 LONG 的資料欄時, 才可以連結一個 LONG 值

兩台 DB 版本都是 Oracle 10g,程式也同一套,就莫名其妙的會發生錯誤,搞半天也沒解決,後來把上述的 OracleType.RowId 改成 OracleType.Varchar 就可以了!但是這樣就很讓人害怕啊,如果程式到客戶那邊,眾多伺服器中,某一台又不接受 Varchar 丟 RowId 怎麼辦 ><。和同事討論許久,最後決定用 CHARTOROWID 包裝,以防萬一:


m_ocmCmd.CommandText = "INSERT INTO FOO SELECT * FROM FOO WHERE ROWID= CHARTOROWID(:V_CURR_REC) "

 

有先進知道原因嗎?

--------
沒什麼特別的~
不過是一些筆記而已