我正在尝试参数化我们所有现有的 sql,但以下代码给我带来了问题:
command.CommandText = String.Format("SELECT * FROM({0})
WHERE ROWNUM <= :maxRecords", command.CommandText);
command.Parameters
.Add("maxRecords", OracleType.Int32).Value = maxRecords;
报错是“ORA-01036: illegal variable name/number”。
我假设这是因为 OracleType.Int32 不是 ROWNUM 的正确数据类型。那是什么?
最佳答案
在 SQLPlus 中,我们可以创建一个包含 rownum
的 View ,以准确查看 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)
关于c# - ROWNUM 的 OracleType 是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2013819/