Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 получение данных из связанного сервера  [new]
wwee12
Member

Откуда:
Сообщений: 64
Задача получить данные из таблицы со связанного сервера Oracle.

Решение1.
Создал на Oracle процедуру с входным параметром1 Varchar2 и выходным параметром2 Varchar2. Вызываю в MSSQL через exec процедуру на Oracle. Получаю данные, а в выходном параметре вместо русских букв восклицательные знаки.

Решение2. Через openquery русские буквы отображаются, но не нельзя присвоить полученные данные переменным.

Решение3. Через select * from mylinkedserver.mydatabase.myschema.mytable

Invalid use of schema and/or catalog for OLE DB provider 'OraOLEDB.Oracle'. A four-part name was supplied, but the provider does not expose the necessary interfaces to use a catalog and/or schema.

Админы перелинковать сервер с использованием провайдера от Microsoft не уговоришь.

Решение4. Через exec ('select ... where ... AND u.user_name = ?', @MyParam) at ora_work не получается задать выходной параметр

exec ('
SELECT ? = count(distinct(cr.client_id)) T FROM t_client_register cr, t_users u
WHERE u.user_id = cr.user_id
AND trunc(cr.date_ins) = trunc(sysdate)
AND u.user_name = ?', @c_finished_card output, @user_name ) at ora_work

SELECT count(distinct(cr.client_id)) INTO ? FROM ...
тоже не работает


Решение4. Не понятно как указать выборку связанный сервер
DECLARE @c_finished_card INT;
DECLARE @user_name VARCHAR(100)
SET @user_name = 'ATS'
DECLARE @str nvarchar(2000)

set @str = N'select @c_finished_card = T from openquery(ora_work,''
SELECT count(distinct(cr.client_id)) T FROM t_client_register cr, t_users u
WHERE u.user_id = cr.user_id
AND trunc(cr.date_ins) = trunc(sysdate)
AND u.user_name =''''' + @user_name + ''''''')'
exec sp_executesql @str, N'@c_finished_card int output' ,@c_finished_card output


Решение5.Равнозначно Решению1.

EXECUTE ('begin
pkg_rpt.get_user_promis_pay(?, ?, ?,?); end;',
@user_name,
@sum_promises_kept OUTPUT,
@c_promises_kept OUTPUT,
@list_agreement_fir_prom_paid OUTPUT
)
AT WORK1;
SELECT @c_promises_kept, @sum_promises_kept, @list_agreement_fir_prom_paid

_____________
5ть вариантов и ни один не работает как надо ( ХелпМИ
6 апр 17, 19:22    [20374981]     Ответить | Цитировать Сообщить модератору
 Re: получение данных из связанного сервера  [new]
o-o
Guest
Пересоздать процедуру с юникодными параметрами? Оракл понимает nvarchar?

В решении 3 вроде ж в оракле к таблице без схемы обращаются, точку вместо схемы поставьте, проверьте
6 апр 17, 19:35    [20375004]     Ответить | Цитировать Сообщить модератору
 Re: получение данных из связанного сервера  [new]
wwee12
Member

Откуда:
Сообщений: 64
o-o
Пересоздать процедуру с юникодными параметрами? Оракл понимает nvarchar?

В решении 3 вроде ж в оракле к таблице без схемы обращаются, точку вместо схемы поставьте, проверьте


с юникодными параметрами -попробую, спасибо
а схему в оракле надо указывать, если она не текущая
6 апр 17, 19:46    [20375024]     Ответить | Цитировать Сообщить модератору
 Re: получение данных из связанного сервера  [new]
o-o
Guest
wwee12
exec ('
SELECT ? = count(distinct(cr.client_id)) T FROM t_client_register cr, t_users u
WHERE u.user_id = cr.user_id
AND trunc(cr.date_ins) = trunc(sysdate(ora_work,''
SELECT count(distinct(cr.client_id)) T FROM t_client_register cr, t_users u
WHERE u.user_id = cr.user_id
AND trunc(cr.date_ins) = trunc(sysdate)
AND u.user_name =''''' + @user_name + ''''''')'

Что-то я тут не вижу никакой схемы.
Здесь не пИшете, вот и не пишИте при селекте, где вым пишут в явном виде, что провайдер схему не поддерживает
6 апр 17, 20:08    [20375072]     Ответить | Цитировать Сообщить модератору
 Re: получение данных из связанного сервера  [new]
wwee12
Member

Откуда:
Сообщений: 64
o-o
wwee12
exec ('
SELECT ? = count(distinct(cr.client_id)) T FROM t_client_register cr, t_users u
WHERE u.user_id = cr.user_id
AND trunc(cr.date_ins) = trunc(sysdate(ora_work,''
SELECT count(distinct(cr.client_id)) T FROM t_client_register cr, t_users u
WHERE u.user_id = cr.user_id
AND trunc(cr.date_ins) = trunc(sysdate)
AND u.user_name =''''' + @user_name + ''''''')'

Что-то я тут не вижу никакой схемы.
Здесь не пИшете, вот и не пишИте при селекте, где вым пишут в явном виде, что провайдер схему не поддерживает


это пример, по которому я пробовал сделать, а не мой реальный код
6 апр 17, 20:28    [20375126]     Ответить | Цитировать Сообщить модератору
 Re: получение данных из связанного сервера  [new]
o-o
Guest
Или не схему, а каталог он не хочет.
Каталог это вроде имя базы.
Там же, если правильно помню, всего 1 база всегда, может ее и не надо писать.
Короче, что-то надо опустить, схему или каталог.
Если студия у вас линкед каталог отрисовывает, откройте его мышкой, найдите нужную таблицу и сгенерите студией скрипт на селект.
Она сама выкинет то, что не надо указывать
6 апр 17, 20:30    [20375132]     Ответить | Цитировать Сообщить модератору
 Re: получение данных из связанного сервера  [new]
wwee12
Member

Откуда:
Сообщений: 64
o-o
Или не схему, а каталог он не хочет.
Каталог это вроде имя базы.
Там же, если правильно помню, всего 1 база всегда, может ее и не надо писать.
Короче, что-то надо опустить, схему или каталог.
Если студия у вас линкед каталог отрисовывает, откройте его мышкой, найдите нужную таблицу и сгенерите студией скрипт на селект.
Она сама выкинет то, что не надо указывать

Спасибо. Этот вариант тоже попробую, к сожалению сейчас нет возможности проверить, только завтра(((
6 апр 17, 20:36    [20375154]     Ответить | Цитировать Сообщить модератору
 Re: получение данных из связанного сервера  [new]
rdejukyr
Guest
https://docs.oracle.com/cd/E10405_01/appdev.120/e10379/ss_oracle_compared.htm

Microsoft SQL Server and Oracle Compared
6 апр 17, 23:23    [20375607]     Ответить | Цитировать Сообщить модератору
 Re: получение данных из связанного сервера  [new]
wwee12
Member

Откуда:
Сообщений: 64
Пересоздание процедуры с NVARCHAR в Oracle не помогло. Помог совет "o-o",т.е. студия сгенерировала запрос на select. нужно было
select * from [mylinkedserver]..[myschema].[mytable]
7 апр 17, 10:11    [20376248]     Ответить | Цитировать Сообщить модератору
 Re: получение данных из связанного сервера  [new]
o-o
Guest
ну точно, раз схемы в оракле тоже есть, логично их указывать,
а базу не надо, т.к. она там одна
7 апр 17, 11:00    [20376533]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить