«SELECT 1 FROM ...» в oracle возвращает десятичный тип - PullRequest
1 голос
/ 26 ноября 2009

Я получаю данные из примера запроса ниже в ORACLE "ВЫБРАТЬ 1 КАК Х ИЗ ..."

когда я выбираю X с помощью dr.Field ("X"), это дает мне ошибку. Я обнаружил, что он возвращается как десятичный тип данных.

Использование того же оператора в MSSQL не вызывает проблем, у меня есть тип данных int.

Есть ли обходной путь или решение?

Ответы [ 5 ]

3 голосов
/ 15 января 2013

Целое число в Oracle - это число с точностью до 0. Поскольку вы не указываете размер (может быть больше 16), оно приводится к десятичному числу.

Попробуйте привести его к номеру (16,0), и все будет в порядке.

Для людей, предлагающих ODP.NET: это дает ту же проблему.

2 голосов
/ 26 ноября 2009

Если вы знаете, что тип этого столбца должен быть int и предполагается, что он не равен нулю:

int x = Convert.ToInt32 (dr.Field ["X"]);

Это не повлияет на других поставщиков БД, которые возвращают int для этого столбца.

Если вы хотите изменить свой запрос Oracle, чтобы вместо него возвращалось int :

SELECT CAST(1 AS INTEGER) FROM ...
2 голосов
/ 26 ноября 2009

Ваш код переднего плана неправильно определяет тип поля. Вы должны иметь возможность переопределить его, чтобы быть целым числом вместо этого. Без более подробной информации об используемом языке и т. Д. Трудно быть более конкретным.

1 голос
/ 09 апреля 2014

То, что мне нужно было сделать, чтобы получить целое число вместо десятичного, было:

ВЫБЕРИТЕ CAST (1 как НОМЕР (9,0)) ОТ Dual

1 голос
/ 26 ноября 2009

У меня дома нет моих книг по Oracle, но, вероятно, можно было бы использовать явное преобразование или приведение к целому числу. (Говоря о запросе Oracle, а не о вашем C #, который получает результат, хотя вы также можете преобразовать его там.) «1» является неоднозначным в том, что касается Oracle.

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