Каков OracleType ROWNUM

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

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

Ошибкой, о которой сообщают, являются "РТЫ 01036: недопустимое имя переменной / число".

Я предполагаю, что это вызвано тем, что OracleType. Int32 не является правильным типом данных для ROWNUM. Таким образом, что это?

7
задан Colin 21 March 2013 в 04:36
поделиться

5 ответов

В 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)
6
ответ дан 7 December 2019 в 10:02
поделиться

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

.
0
ответ дан 7 December 2019 в 10:02
поделиться

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

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

Это означает:

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

-2
ответ дан 7 December 2019 в 10:02
поделиться
[

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

].
1
ответ дан 7 December 2019 в 10:02
поделиться

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

1
ответ дан 7 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: