Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ещё раз о NUMBER в LinkedServer-e Оракл  [new]
Alex Zed
Member

Откуда:
Сообщений: 46
Доброго времени суток, форумчане.

Имеется LinkedServer на Oracle 9i и необходимость тащить из него данные в MSSQL2005SP2, для начала пытаюсь сделать тупо:
insert into TABLE
select * from LINKEDSERVER..SCHEME.TABLE
(да, да, я знаю про OpenQuery ;))

и натыкаюсь на то, что в таблице на стороне Оракла имеется поле типа NUMBER, которое на стороне MSSQL создано как NUMERIC(38,0) (создавалось автоматом при попытке сделать SSIS package, но это другая история) и на это поле MSSQL ругается вот таким образом:
Error converting data type nvarchar to numeric.

На поля в Оракле, которые определены типа NUMBER(x,0) сиквел не ругается. Как правильно обойти этот неопределенный NUMBER, если возможности модифицировать его определение в Оракле нет?

PS: и вообще с какого перепугу он там nvarchar видит :))
28 апр 08, 10:40    [5602881]     Ответить | Цитировать Сообщить модератору
 Re: Ещё раз о NUMBER в LinkedServer-e Оракл  [new]
Glory
Member

Откуда:
Сообщений: 104760
Никак не обойти. Все столбцы NUMBER на стороне Oracle должны иметь явно заданные размер и точность
28 апр 08, 10:42    [5602908]     Ответить | Цитировать Сообщить модератору
 Re: Ещё раз о NUMBER в LinkedServer-e Оракл  [new]
Alex Zed
Member

Откуда:
Сообщений: 46
Glory
Никак не обойти. Все столбцы NUMBER на стороне Oracle должны иметь явно заданные размер и точность


А cast, не поможет?

PS: вот это грабли :(
28 апр 08, 10:53    [5602986]     Ответить | Цитировать Сообщить модератору
 Re: Ещё раз о NUMBER в LinkedServer-e Оракл  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alex Zed
Glory
Никак не обойти. Все столбцы NUMBER на стороне Oracle должны иметь явно заданные размер и точность


А cast, не поможет?

PS: вот это грабли :(

cast не поможет. Потому, что Oracle должен возвращать правильные метаданные.Т.е. информацию о типе и размере столбца.
28 апр 08, 10:55    [5602999]     Ответить | Цитировать Сообщить модератору
 Re: Ещё раз о NUMBER в LinkedServer-e Оракл  [new]
Alex Zed
Member

Откуда:
Сообщений: 46
Glory
Alex Zed
Glory
Никак не обойти. Все столбцы NUMBER на стороне Oracle должны иметь явно заданные размер и точность


А cast, не поможет?

PS: вот это грабли :(

cast не поможет. Потому, что Oracle должен возвращать правильные метаданные.Т.е. информацию о типе и размере столбца.


Сижу и тыркаюсь, чтобы обойти и набрел на такой путь. В таблице приемнике делаем nvarchar(50), данные инсертятся, прекрасно. В строке видим разделитель ",". Пробуем сделать вот так:
select convert(decimal(38,5),val) as VAL1 from DB.USER.TABLE;
получаем вышеуказанную ошибку.

Пробуем сделать вот так:
select convert(decimal(38,5), replace(val,',','.')) as VAL1 from DB.USER.TABLE;
и видим результат в закладке Results c разделителем ".". И тут я непонимаю - что в Оракле десятичный разделитель запятая, а в MSSQL - точка. Это нормально или у меня где-то локаль не настроена? Или они не из локали берут десятичный разделитель?

PS: далее можно инсертить этот селект в чистовую таблицу, или найти путь ещё короче ;).
28 апр 08, 13:56    [5604054]     Ответить | Цитировать Сообщить модератору
 Re: Ещё раз о NUMBER в LinkedServer-e Оракл  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alex Zed
И тут я непонимаю - что в Оракле десятичный разделитель запятая, а в MSSQL - точка. Это нормально или у меня где-то локаль не настроена? Или они не из локали берут десятичный разделитель?

Не знаю, что там с Ораклом, но в MSSQL десятичным разделителем является только точка. И никакми локалями это не меняется
28 апр 08, 13:59    [5604075]     Ответить | Цитировать Сообщить модератору
 Re: Ещё раз о NUMBER в LinkedServer-e Оракл  [new]
Alex Zed
Member

Откуда:
Сообщений: 46
Glory
Alex Zed
И тут я непонимаю - что в Оракле десятичный разделитель запятая, а в MSSQL - точка. Это нормально или у меня где-то локаль не настроена? Или они не из локали берут десятичный разделитель?

Не знаю, что там с Ораклом, но в MSSQL десятичным разделителем является только точка. И никакми локалями это не меняется


Значит эта ошибка конвертации связана с тем, что там и там разные десятичные разделители. ;)
28 апр 08, 14:05    [5604118]     Ответить | Цитировать Сообщить модератору
 Re: Ещё раз о NUMBER в LinkedServer-e Оракл  [new]
Alex Zed
Member

Откуда:
Сообщений: 46
Вобщем пока-что делаю так:
insert into DB.DBO.TABLE (VAL)
select convert(numeric(38,5), replace(cast (VAL as nvarchar(50)),',','.')) from LINKEDSERVER..SCHEME.TABLE where DD_MM_YYYY = @date2;
и кажется работает :))
28 апр 08, 15:40    [5604692]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Ещё раз о NUMBER в LinkedServer-e Оракл  [new]
qu100
Member

Откуда: Москва
Сообщений: 18
Alex Zed,

Cпасибо, совет помог!
18 июн 09, 16:22    [7316416]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить