2010-01-06 27 views
7

我試圖進行參數我們所有現有的SQL,但下面的代碼是給我一個問題OracleType:什麼是ROWNUM

command.CommandText = String.Format("SELECT * FROM({0}) 
     WHERE ROWNUM <= :maxRecords", command.CommandText); 
command.Parameters 
     .Add("maxRecords", OracleType.Int32).Value = maxRecords; 

報告的錯誤是「ORA-01036:非法的變量名/編號」。

我認爲這是因爲OracleType.Int32不是ROWNUM的正確數據類型。那它是什麼?

回答

6

在sqlplus,我們可以創建一個包含rownum看到什麼數據類型Oracle使用一個觀點:

TEST>create view v_test as select rownum rn, dummy from dual; 

View created. 

TEST>desc v_test 
Name  Null? Type 
-------- -------- ------------- 
RN    NUMBER 
DUMMY    VARCHAR2(1) 

所以到Oracle,這虛列是一個數字。其中基於此鏈接(http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#i16209)上可容納:

The following numbers can be stored in a NUMBER column: 

-Positive numbers in the range 1 x 10^-130 to 9.99...9 x 10^125 with up to 38 significant digits 
-Negative numbers from -1 x 10^-130 to 9.99...99 x 10^125 with up to 38 significant digits 
-Zero 
-Positive and negative infinity (generated only by importing from an Oracle Database, Version 5) 
1

我相信,OracleType.Number將工作,如果數據類型是問題。

1

好問題。你有沒有嘗試過:OracleType.UInt32?我會嘗試OracleType.Number作爲最後的手段。

0

對不起大家,這個問題是不是數據類型。這是因爲命令對象在方法代碼中多次使用,以不同的參數運行不同的sql。在我的調用之後調用command.Parameters.Clear()對問題進行排序。非常感謝您深入瞭解如何查找DataType。這對進一步的參考很有用。