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

Откуда:
Сообщений: 53
Селект в Oracle-вом клиенте выполняется корректно, показывает результат, но если выполнять через

select * from openquery (BD'select * from table')
exec ('select * from openquery (BD'select * from table')')

из ms sqlвыдаёт пустоту, при этом не ругаясь.

С чем это может быть связано ?

ms sql 10.50...
oracle 11.2.0...
24 окт 17, 09:54    [20894739]     Ответить | Цитировать Сообщить модератору
 Re: Openquery из MS SQL в Oracle  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
svanrus,

у вас какая то странная запись
https://docs.microsoft.com/en-us/sql/t-sql/functions/openquery-transact-sql
24 окт 17, 09:56    [20894742]     Ответить | Цитировать Сообщить модератору
 Re: Openquery из MS SQL в Oracle  [new]
svanrus
Member

Откуда:
Сообщений: 53
TaPaK,

select * from openquery (BD'select * from table')

exec ('select * from openquery (BD'select * from table')')

это два разных запроса
24 окт 17, 09:59    [20894749]     Ответить | Цитировать Сообщить модератору
 Re: Openquery из MS SQL в Oracle  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33683
Блог
svanrus,

почитатей про синтаксис openquery,
ссылка выше, сравните с вашим запросом
24 окт 17, 10:02    [20894756]     Ответить | Цитировать Сообщить модератору
 Re: Openquery из MS SQL в Oracle  [new]
svanrus
Member

Откуда:
Сообщений: 53
Критик, так бы писало ошибку...

вообщем вот скрипт, который без openquery напрямую в oracle выдает результат, через openquery из ms sql выдаёт пустоту.


+
select *
from openquery 
(DATABASE,'select
    c.pole1
    , c.pole2
    , c.pole3 
    , c.pole4
    , c.pole5
    , c.pole6
from 
    OW.table1 c
    join OW.table1 ca on c.pole4= ca.rbs_number
    join OW.table2 cl on (c.client__id = cl.id and cl.state = ''U'')
    join OW.table2 cla on (ca.client__id = cla.id and cla.state = ''U'')
    left join jjj.table3 uc on c.id = uc.card_id
    left join 
    (
    select distinct
        ca.pole1 acc
        , acc.id
        , acc.gl_numb
        , b.bal
    from 
        OW.table1 c
        join OW.table1 ca on c.pole4= ca.rbs_number
        join OW.OW_ACC acc on ca.id = acc.acnt_contract__oid
        join OW.OW_ACC_BAL b on acc.id = b.id
        
    where 
        1 = 1
        and c.state = ''U'' 
        and c.con_cat = ''C''
        and c.pole1 like ''777777%''    
        --and c.pole3 = ''.1.''
        and c.ready = ''Y''
        and c.pole5 between ''24.10.2017'' and ''31.10.2017''  
        and ca.state = ''U''
        and ca.available = ''Y''
        and ca.ready = ''Y''
        ---
        and substr(acc.gl_number,1,3) in (
                                        ''408''  
                                        ,''474''
                                        )
        and b.date_ = trunc(sysdate-3)
        
    ) t1 on ca.pole1 = t1.acc

where 
    1 = 1
    and c.state = ''U'' 
    and c.con_cat = ''C''
    and c.ready = ''Y''
    and c.pole1 like ''777777%''  
   
    and c.pole5between ''24.10.2017'' and ''31.10.2017''  
    and ca.state = ''U''
    and ca.ready = ''Y''
    and ca.available = ''Y''
group by
    c.pole1
    , c.contr_status
    , c.pole3 
    , c.rbs_number
    , c.date_open
    , c.contract_name
    , cl.phone
    , substr(c.add,instr(c.add,''BRANCH='')+7,3)
    , cla.reg_number
    , cla.phone 
    , cla.short_name
    , c.f_i
    , case when uc.active_date is not null then ''Да'' else ''Нет'' end')


в чем может быть ошибка ?

Модератор: Освойте, наконец, теги.


Сообщение было отредактировано: 24 окт 17, 13:51
24 окт 17, 10:55    [20894915]     Ответить | Цитировать Сообщить модератору
 Re: Openquery из MS SQL в Oracle  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
svanrus
Селект в Oracle-вом клиенте выполняется корректно, показывает результат, но если выполнять через

select * from openquery (BD'select * from table')
exec ('select * from openquery (BD'select * from table')')

из ms sqlвыдаёт пустоту, при этом не ругаясь.

С чем это может быть связано ?

ms sql 10.50...
oracle 11.2.0...

В клиенте Oracle выполняете запрос из боевой базы, а linked server настроен на пустую тестовую.
24 окт 17, 11:22    [20895018]     Ответить | Цитировать Сообщить модератору
 Re: Openquery из MS SQL в Oracle  [new]
Eleanor
Member

Откуда:
Сообщений: 2877
svanrus
из ms sqlвыдаёт пустоту, при этом не ругаясь.

Вообще пустоту для любого запроса или пустой резалтсет с колонками?
24 окт 17, 11:30    [20895037]     Ответить | Цитировать Сообщить модератору
 Re: Openquery из MS SQL в Oracle  [new]
svanrus
Member

Откуда:
Сообщений: 53
Eleanor,

Нет, этот же запрос (только join-ов и group-ов) отрабатывает норм.
Выдает пустой резалтсет с колонками.
24 окт 17, 12:20    [20895205]     Ответить | Цитировать Сообщить модератору
 Re: Openquery из MS SQL в Oracle  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
svanrus
Eleanor,

Нет, этот же запрос (только join-ов и group-ов) отрабатывает норм.
Выдает пустой резалтсет с колонками.

Так он же внутри openquery съедает двойные кавычки, делая ординарными.
Используйте экранирование.
Автор: Myp3_u_K
24 окт 17, 12:36    [20895263]     Ответить | Цитировать Сообщить модератору
 Re: Openquery из MS SQL в Oracle  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2979
svanrus
Eleanor,

Нет, этот же запрос (только join-ов и group-ов) отрабатывает норм.
Выдает пустой резалтсет с колонками.


я бы все строки вида
and c.pole5 between ''24.10.2017'' and ''31.10.2017'' 

заменил бы на
and c.pole5 between TO_DATE(''24.10.2017'', ''DD.MM.YYYY'') and TO_DATE(''31.10.2017'', ''DD.MM.YYYY'') 

если там конечно даты
24 окт 17, 13:38    [20895483]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить