Ошибка отображения данных типа Oracle и C # - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть таблица с ID NUMBER(18), и у меня есть класс со свойствами public Int64 ID { get; set; } для отображения формы идентификатора C # против Oracle.

Определение моей таблицы

enter image description here

Но у меня возникает ошибка, когда я получаю максимальный идентификатор, например:

  1. Выполнить запрос

    SELECT MAX(ID) ID FROM MYTABLE
    

    Система выдает ошибку:

    "Объект типа 'System.Decimal' нельзя преобразовать в тип 'System.Int64'."

  2. Но когда я запускаю запрос так:

    SELECT ID FROM(
                    SELECT ID FROM MYTABLE ORDER BY ID DESC
                  ) WHERE ROWNUM =1
    

    Все нормально.

Я не знаю, почему (1) выдается ошибка, и почему (2) сделано?

В чем разница между типом данных (1) и (2)?

1 Ответ

0 голосов
/ 28 апреля 2018

Возможный сценарий 1:

Я предполагаю, что у вас есть NULL значений в таблице (поэтому оба ваших запроса не эквивалентны):

SELECT MAX(ID) ID FROM T_00_RQMM  -- aggregate func ignore NULLS

Но:

SELECT ID FROM(SELECT ID FROM T_00_RQMM ORDER BY ID DESC) WHERE ROWNUM = 1;  
-- NULL is the max value

Демонстрация DBFiddle

В любом случае вам следует попробовать составить карту:

using System.Numerics;
...
public BigInteger ID { get; set; }

EDIT:

Возможный сценарий 2:

Это может быть проблема с типом данных (тогда используйте явное CAST):

SELECT CAST(MAX(ID) AS NUMBER(18,0)) ID FROM T_00_RQMM 

DBFiddle Demo 2

Полная демонстрация:

CREATE TABLE T_00_RQMM (ID NUMBER(18,0));
INSERT INTO T_00_RQMM VALUES(NULL);
INSERT INTO T_00_RQMM VALUES(100);

CREATE TABLE t1 AS SELECT MAX(ID) ID FROM T_00_RQMM;

CREATE TABLE t2 AS SELECT ID FROM(SELECT ID FROM T_00_RQMM ORDER BY ID DESC) 
                                  WHERE ROWNUM = 1;

CREATE TABLE t3 AS SELECT CAST(MAX(ID) AS NUMBER(18,0)) ID FROM T_00_RQMM;


SELECT TABLE_NAME, COLUMN_NAME, DATA_PRECISION, DATA_SCALE
FROM all_tab_cols
where table_name in ('T1', 'T2', 'T3')
ORDER BY Table_name;

Выход:

+------------+-------------+----------------+------------+
| TABLE_NAME | COLUMN_NAME | DATA_PRECISION | DATA_SCALE |
+------------+-------------+----------------+------------+
| T1         | ID          | null           | null       |
| T2         | ID          | 18             | 0          |
| T3         | ID          | 18             | 0          |
+------------+-------------+----------------+------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...