Что такое OracleType для ROWNUM? - PullRequest
       0

Что такое OracleType для ROWNUM?

7 голосов
/ 06 января 2010

Я пытаюсь параметризовать все наши существующие sql, но следующий код вызывает у меня проблему:

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. Так что же это?

Ответы [ 5 ]

6 голосов
/ 06 января 2010

В 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 голос
/ 06 января 2010

Хороший вопрос. Вы пробовали: OracleType.UInt32? Я бы попробовал OracleType.Number в крайнем случае.

1 голос
/ 06 января 2010

Я считаю, что OracleType.Number будет работать, если проблема связана с типом данных.

0 голосов
/ 06 января 2010

Вам необходимо использовать OracleType.RowID для идентификаторов строк Oracle. Они не числа.

http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracletype.aspx

Это заявляет:

Строковое представление base64 Тип данных Oracle ROWID. Используйте .NET Framework String или OracleClient Тип данных OracleString в значении.

0 голосов
/ 06 января 2010

Извините, проблема не в типе данных. это потому, что объект команды используется более одного раза в коде метода для запуска другого sql с разными параметрами. Вызов command.Parameters.Clear () после того, как мой вызов решил проблему. Большое спасибо за понимание того, как найти DataType. Это будет полезно для дальнейшего использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...