2010-08-11 61 views
0

我在C#.Net應用程序中運行下面的代碼,但是我不斷收到錯誤ORA-01722:無效編號。當在PL/SQL Developer中直接運行相同的SQL時,它完全按照我的要求提供,而不會抱怨。Oracle無效的C#編號錯誤

這可能是什麼原因造成的?

OracleCommand command = connection.CreateCommand(); 
command.CommandType = CommandType.Text; 
command.CommandText = "insert into my_table (select i.*, null from my_view i where i.usr_id is not null)"; 
command.ExecuteNonQuery(); 

注:我使用Oracle.DataAccess.Client

+1

檢查my_table和my_view中的列類型,通常在您嘗試將字符轉換爲數字時發生,即to_number('aaa') – 2010-08-11 12:22:22

+0

我確實檢查過,並且所有內容都正確。我相信如果我試圖使用to_number()或比較將chars轉換爲數字,那麼錯誤也會出現在PL/SQL中。 – tkalve 2010-08-11 12:24:31

+0

請提供用於查詢中創建視圖和表的SQL語句。 (只有字段和約束,如果有的話,沒有鍵和索引)。這些腳本可以從PL/SQL Developer中生成(視圖對象,窗口右下角的「查看SQL」)。 – ThinkJet 2010-08-11 13:05:10

回答

2

我發現了這個問題。視圖中的數字列之一使用逗號(,)作爲小數分隔符,而表格預期爲點(。)。

感謝您的幫助。 :)

1

我不知道這是否會導致開發者和客戶之間的不同的行爲,但你正在做一個假設,即列的順序在視圖和表格中是一樣的。它可能是可能,儘管不太可能,它試圖從視圖中的列中將字符數據插入表中的數字字段,僅僅是從不同的順序排列它們。嘗試在插入和選擇中指定列名並查看是否有幫助。我還想知道是否存在日期格式不匹配的情況,但我沒有看到這會在一個語句中導致問題。如果這是一個簡化版本,那麼真正的參數是否有參數?

+0

簡化的唯一方法是表格和視圖名稱。我測試過指定所有列名稱,但仍然收到錯誤消息。我的表中只有varchar2和number列類型,所有數字都可以在PL/SQL中使用to_number()轉換爲數字。 – tkalve 2010-08-11 13:04:00

+1

是否存在架構衝突的可能性 - 您是否在兩種情況下都以相同用戶的身份連接?是否有插入觸發器觸發? – 2010-08-11 13:40:27