У меня действительно странная проблема со сторонним веб-сервисом, который использует ODBC-соединение с Oracle 10.2.0.3.0.Я написал клиент .NET, который генерирует тот же SQL, что и веб-сервис, чтобы я мог узнать, что происходит.Веб-служба размещена на IIS 6 в режиме x64, поэтому мы используем клиент Oracle x64.
Версия клиента oracle - 10.2.0.1.0.
У меня есть таблица, которая выглядит следующим образом(Я удалил некоторые столбцы и имена):
SQL> describe tablename;
Name Null? Type
----------------------------------------- -------- ----------------------------
KOD VARCHAR2(30)
ORDNING NUMBER(5)
AVGIFT NUMBER(9)
Затем я в SQL * Plus выдаю следующее утверждение:
SELECT KOD as kod, AVGIFT as riskPoang
FROM tablename Where upper(KODTYP) = 'OBJLIVSV_RISKVERKSAMTYP' ORDER BY ORDNING
И получаю следующий результат:
KOD RISKPOANG
------------------------------ ----------
Hög risk 55
Mellan risk 35
Låg risk 15
Mycket låg risk 5
Но когда я выполняю тот же самый SQL, используя тот же DSN на той же машине, я получаю это:
Values
Kod: Hög risk RiskPoäng: 0
Kod: Mellan risk RiskPoäng: 0
Kod: Låg risk RiskPoäng: 0
Kod: Mycket låg risk RiskPoäng: 0
Если я сначала приведу число к varchar, а затем снова вернусь к числу,как это:
SELECT KOD as kod, to_number(to_char(AVGIFT, '99'), '9999999999') as riskPoang
FROM tablename Where upper(KODTYP) = 'OBJLIVSV_RISKVERKSAMTYP' ORDER BY ORDNING
Я получаю правильный результат:
Values
Kod: Hög risk RiskPoäng: 55
Kod: Mellan risk RiskPoäng: 35
Kod: Låg risk RiskPoäng: 15
Kod: Mycket låg risk RiskPoäng: 5
Кто-нибудь еще испытывал это?Это невероятно раздражает, и я полностью застрял и не уверен, что делать дальше.У нас есть сторонний веб-сервис, который использует эти таблицы, поэтому я должен заставить работать оригинальный SQL-оператор, поскольку не могу изменить его код.
И указатели очень ценятся!: -)
С уважением, Матс