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

Откуда: Tashkent
Сообщений: 319
Доброго времени суток

столкнулся с необходимостью связать Sql server с Oracle

пишу такой запрос
	SELECT * FROM OPENQUERY (
	MAIN, 'With Serv as
 (Select * from dual)
Select *
  From Serv, Serv1')


выдает ошибку Incorrect syntax near 'With Serv as

подскажите пожалуйста как можно обойти данную ошибку
спасибо
11 июл 14, 08:40    [16289885]     Ответить | Цитировать Сообщить модератору
 Re: Openquery With Parameters  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31994
718
выдает ошибку Incorrect syntax near 'With Serv as
А на оракле выполняется запрос?
With Serv as
 (Select * from dual)
Select *
  From Serv, Serv1
11 июл 14, 08:48    [16289899]     Ответить | Цитировать Сообщить модератору
 Re: Openquery With Parameters  [new]
718
Member

Откуда: Tashkent
Сообщений: 319
да на самом оракле без проблем
если на sql server запускаю таким же образом другой запрос точнее без параметра With то тоже нормально отрабатывается
11 июл 14, 08:55    [16289924]     Ответить | Цитировать Сообщить модератору
 Re: Openquery With Parameters  [new]
Glory
Member

Откуда:
Сообщений: 104751
718
да на самом оракле без проблем

А дял выполнения "на самом оракле" использован совершенно тот же драйвер, что и в OPENQUERY ?
11 июл 14, 10:38    [16290475]     Ответить | Цитировать Сообщить модератору
 Re: Openquery With Parameters  [new]
718
Member

Откуда: Tashkent
Сообщений: 319
в Ms sql используется Microsoft OLE DB Provider for Oracle
а на Oracle я запуская запрос на клиента PLSQLDeveloper какой драйвер если честно не знаю
11 июл 14, 11:22    [16290782]     Ответить | Цитировать Сообщить модератору
 Re: Openquery With Parameters  [new]
718
Member

Откуда: Tashkent
Сообщений: 319
вот сам запрос что пытаюсь выполнить
SELECT * FROM OPENQUERY (
	MAIN, 'Select Serv.Status,
       r.Name_1 REGION_NAME,
       Serv.SERV_NAME,
       Sum(Serv.SERV_COUNT) SERV_COUNT,
       c.Organization_Id 
From
 (Select ''NEW'' Status,
         Contract_Id,
         ''Телефония'' Serv_Name,
         Count(Ph_Service_Id) Serv_Count
    From (Select x.Contract_Id,
                 psd.Ph_Service_Id,
                 psd.Begin_Date,
                 ps.State_Code,
                 row_number() over(Partition By psd.Ph_Service_Id Order By psd.Begin_Date) Ord
            From Bil_Ph_Services          Ps,
                 Bil_Ph_Service_Dates     Psd,
                 Crm_Contract_Ph_Services x,
                 Bil_Ph_Tariffs           pt
           Where Ps.Ph_Service_Id = Psd.Ph_Service_Id
             And psd.Tariff_Id = pt.Tariff_Id
             And pt.Service_Type_Code = ''PHONE''
             And x.Ph_Service_Id = Ps.Ph_Service_Id
             And State_Code Not In (''N'') 
          )
   Where ord = 1
     And Begin_Date Between Trunc(Sysdate, ''month'') and
         LAST_DAY(To_Char(Sysdate, ''dd.mm.yyyy''))
   Group By Contract_Id
  Union All
  Select ''NEW'' Status,
         Contract_Id,
         ''Видеотелефония'' Serv_Name,
         Count(Ph_Service_Id) Serv_Count
    From (Select x.Contract_Id,
                 psd.Ph_Service_Id,
                 psd.Begin_Date,
                 ps.State_Code,
                 row_number() over(Partition By psd.Ph_Service_Id Order By psd.Begin_Date) Ord
            From Bil_Ph_Services          Ps,
                 Bil_Ph_Service_Dates     Psd,
                 Crm_Contract_Ph_Services x,
                 Bil_Ph_Tariffs           pt
           Where Ps.Ph_Service_Id = Psd.Ph_Service_Id
             And psd.Tariff_Id = pt.Tariff_Id
             And pt.Service_Type_Code = ''VIDEO''
             And x.Ph_Service_Id = Ps.Ph_Service_Id
             And State_Code Not In (''N'') 
          )
   Where ord = 1
     And Begin_Date Between Trunc(Sysdate, ''month'') and
         LAST_DAY(To_Char(Sysdate, ''dd.mm.yyyy''))
   Group By Contract_Id
  Union All
  Select ''NEW'' Status,
         Contract_Id,
         ''Интернет'' Serv_Name,
         Count(Inet_Service_Id) Serv_Count
    From (Select x.Contract_Id,
                 psd.Inet_Service_Id,
                 psd.Begin_Date,
                 ps.State_Code,
                 row_number() over(Partition By psd.Inet_Service_Id Order By psd.Begin_Date) Ord
            From Bil_Inet_Services          Ps,
                 Bil_Inet_Service_Dates     Psd,
                 Crm_Contract_Inet_Services x
           Where Ps.Inet_Service_Id = Psd.Inet_Service_Id
             And x.Inet_Service_Id = Ps.Inet_Service_Id
             And State_Code Not In (''N'') 
          )
   Where ord = 1
     And Begin_Date Between Trunc(Sysdate, ''month'') and
         LAST_DAY(To_Char(Sysdate, ''dd.mm.yyyy''))
   Group By Contract_Id
  Union All
  Select ''NEW'' Status,
         Contract_Id,
         ''Ip-транспорт'' Serv_Name,
         Count(Trans_Service_Id) Serv_Count
    From (Select x.Contract_Id,
                 psd.Trans_Service_Id,
                 psd.Begin_Date,
                 ps.State_Code,
                 row_number() over(Partition By psd.Trans_Service_Id Order By psd.Begin_Date) Ord
            From Bil_Trans_Services          Ps,
                 Bil_Trans_Service_Dates     Psd,
                 Crm_Contract_Trans_Services x
           Where Ps.Trans_Service_Id = Psd.Trans_Service_Id
             And x.Trans_Service_Id = Ps.Trans_Service_Id
             And State_Code Not In (''N'') 
          )
   Where ord = 1
     And Begin_Date Between Trunc(Sysdate, ''month'') and
         LAST_DAY(To_Char(Sysdate, ''dd.mm.yyyy''))
   Group By Contract_Id
  Union All
  Select ''NEW'' Status,
         Contract_Id,
         ''IPTV'' Serv_Name,
         Count(Iptv_Service_Id) Serv_Count
    From (Select x.Contract_Id,
                 psd.Iptv_Service_Id,
                 psd.Begin_Date,
                 ps.State_Code,
                 row_number() over(Partition By psd.Iptv_Service_Id Order By psd.Begin_Date) Ord
            From Bil_Iptv_Services          Ps,
                 Bil_Iptv_Service_Dates     Psd,
                 Crm_Contract_Iptv_Services x
           Where Ps.Iptv_Service_Id = Psd.Iptv_Service_Id
             And x.Iptv_Service_Id = Ps.Iptv_Service_Id
             And State_Code Not In (''N'') 
          )
   Where ord = 1
     And Begin_Date Between Trunc(Sysdate, ''month'') and
         LAST_DAY(To_Char(Sysdate, ''dd.mm.yyyy''))
   Group By Contract_Id
  Union All
  Select ''NEW'' Status,
         Contract_Id,
         ''VPN'' Serv_Name,
         Count(vpn_Service_Id) Serv_Count
    From (Select x.Contract_Id,
                 psd.vpn_Service_Id,
                 psd.Begin_Date,
                 ps.State_Code,
                 row_number() over(Partition By psd.vpn_Service_Id Order By psd.Begin_Date) Ord
            From Bil_vpn_Services          Ps,
                 Bil_vpn_Service_Dates     Psd,
                 Crm_Contract_vpn_Services x
           Where Ps.vpn_Service_Id = Psd.vpn_Service_Id
             And x.vpn_Service_Id = Ps.vpn_Service_Id
             And State_Code Not In (''N'') 
          )
   Where ord = 1
     And Begin_Date Between Trunc(Sysdate, ''month'') and
         LAST_DAY(To_Char(Sysdate, ''dd.mm.yyyy''))
   Group By Contract_Id
  
  Union ALl
  
  Select ''ANNUL'' Status,
         Contract_Id,
         ''Телефония'' Serv_Name,
         Count(Ph_Service_Id) Serv_Count
    From (Select x.Contract_Id,
                 psd.Ph_Service_Id,
                 psd.End_Date,
                 ps.State_Code,
                 row_number() over(Partition By psd.Ph_Service_Id Order By psd.Begin_Date desc) Ord
            From Bil_Ph_Services          Ps,
                 Bil_Ph_Service_Dates     Psd,
                 Crm_Contract_Ph_Services x,
                 Bil_Ph_Tariffs           pt
           Where Ps.Ph_Service_Id = Psd.Ph_Service_Id
             And psd.Tariff_Id = pt.Tariff_Id
             And pt.Service_Type_Code = ''PHONE''
             And x.Ph_Service_Id = Ps.Ph_Service_Id
             And ps.State_Code In (''T'') 
          )
   Where ord = 1
     And End_Date Between Trunc(Sysdate, ''month'') and
         LAST_DAY(To_Char(Sysdate, ''dd.mm.yyyy''))
   Group By Contract_Id
  Union All
  Select ''ANNUL'' Status,
         Contract_Id,
         ''Видеотелефония'' Serv_Name,
         Count(Ph_Service_Id) Serv_Count
    From (Select x.Contract_Id,
                 psd.Ph_Service_Id,
                 psd.End_Date,
                 ps.State_Code,
                 row_number() over(Partition By psd.Ph_Service_Id Order By psd.Begin_Date desc) Ord
            From Bil_Ph_Services          Ps,
                 Bil_Ph_Service_Dates     Psd,
                 Crm_Contract_Ph_Services x,
                 Bil_Ph_Tariffs           pt
           Where Ps.Ph_Service_Id = Psd.Ph_Service_Id
             And psd.Tariff_Id = pt.Tariff_Id
             And pt.Service_Type_Code = ''VIDEO''
             And x.Ph_Service_Id = Ps.Ph_Service_Id
             And ps.State_Code In (''T'') 
          )
   Where ord = 1
     And End_Date Between Trunc(Sysdate, ''month'') and
         LAST_DAY(To_Char(Sysdate, ''dd.mm.yyyy''))
   Group By Contract_Id
  
  Union All
  Select ''ANNUL'' Status,
         Contract_Id,
         ''Интернет'' Serv_Name,
         Count(Inet_Service_Id) Serv_Count
    From (Select x.Contract_Id,
                 psd.Inet_Service_Id,
                 psd.End_Date,
                 ps.State_Code,
                 row_number() over(Partition By psd.Inet_Service_Id Order By psd.Begin_Date desc) Ord
            From Bil_Inet_Services          Ps,
                 Bil_Inet_Service_Dates     Psd,
                 Crm_Contract_Inet_Services x
           Where Ps.Inet_Service_Id = Psd.Inet_Service_Id
             And x.Inet_Service_Id = Ps.Inet_Service_Id
             And ps.State_Code In (''T'') 
          )
   Where ord = 1
     And End_Date Between Trunc(Sysdate, ''month'') and
         LAST_DAY(To_Char(Sysdate, ''dd.mm.yyyy''))
   Group By Contract_Id
  Union All
  Select ''ANNUL'' Status,
         Contract_Id,
         ''Ip-транспорт'' Serv_Name,
         Count(Trans_Service_Id) Serv_Count
    From (Select x.Contract_Id,
                 psd.Trans_Service_Id,
                 psd.End_Date,
                 ps.State_Code,
                 row_number() over(Partition By psd.Trans_Service_Id Order By psd.Begin_Date desc) Ord
            From Bil_Trans_Services          Ps,
                 Bil_Trans_Service_Dates     Psd,
                 Crm_Contract_Trans_Services x
           Where Ps.Trans_Service_Id = Psd.Trans_Service_Id
             And x.Trans_Service_Id = Ps.Trans_Service_Id
             And ps.State_Code In (''T'') 
          )
   Where ord = 1
     And End_Date Between Trunc(Sysdate, ''month'') and
         LAST_DAY(To_Char(Sysdate, ''dd.mm.yyyy''))
   Group By Contract_Id
  Union All
  Select ''ANNUL'' Status,
         Contract_Id,
         ''IPTV'' Serv_Name,
         Count(Iptv_Service_Id) Serv_Count
    From (Select x.Contract_Id,
                 psd.Iptv_Service_Id,
                 psd.End_Date,
                 ps.State_Code,
                 row_number() over(Partition By psd.Iptv_Service_Id Order By psd.Begin_Date desc) Ord
            From Bil_Iptv_Services          Ps,
                 Bil_Iptv_Service_Dates     Psd,
                 Crm_Contract_Iptv_Services x
           Where Ps.Iptv_Service_Id = Psd.Iptv_Service_Id
             And x.Iptv_Service_Id = Ps.Iptv_Service_Id
             And ps.State_Code In (''T'') 
          )
   Where ord = 1
     And End_Date Between Trunc(Sysdate, ''month'') and
         LAST_DAY(To_Char(Sysdate, ''dd.mm.yyyy''))
   Group By Contract_Id
  Union All
  Select ''ANNUL'' Status,
         Contract_Id,
         ''VPN'' Serv_Name,
         Count(vpn_Service_Id) Serv_Count
    From (Select x.Contract_Id,
                 psd.vpn_Service_Id,
                 psd.End_Date,
                 ps.State_Code,
                 row_number() over(Partition By psd.vpn_Service_Id Order By psd.Begin_Date desc) Ord
            From Bil_vpn_Services          Ps,
                 Bil_vpn_Service_Dates     Psd,
                 Crm_Contract_vpn_Services x
           Where Ps.vpn_Service_Id = Psd.vpn_Service_Id
             And x.vpn_Service_Id = Ps.vpn_Service_Id
             And ps.State_Code In (''T'') 
          )
   Where ord = 1
     And End_Date Between Trunc(Sysdate, ''month'') and
         LAST_DAY(To_Char(Sysdate, ''dd.mm.yyyy''))
   Group By Contract_Id) Serv,
       Os_Organizations_v  o,
       Crm_Subjects_v      s,
       Crm_Contracts       c,
       Crm_s_Subject_Types St,
       Os_s_Regions        r
 Where o.Organization_Id = s.Organization_Id
   And s.Subject_Id = c.Subject_Id
   And s.Subject_Type_Code = St.Code
   And St.Organization_Id = o.Organization_Id
   and s.Region_Id = r.Region_Id
   And Serv.Contract_Id = c.Contract_Id
 Group by Serv.Status, r.Name_1, Serv.SERV_NAME, c.Organization_Id
 Order by Serv.Status, r.Name_1, Serv.SERV_NAME
')
11 июл 14, 11:24    [16290794]     Ответить | Цитировать Сообщить модератору
 Re: Openquery With Parameters  [new]
Glory
Member

Откуда:
Сообщений: 104751
718
вот сам запрос что пытаюсь выполнить

MSSQL глубоко безразличен текст запроса внутри OPENQUERY.
Он его передает как есть через драйвер удаленному серверу.
11 июл 14, 11:26    [16290808]     Ответить | Цитировать Сообщить модератору
 Re: Openquery With Parameters  [new]
718
Member

Откуда: Tashkent
Сообщений: 319
Кажется все же не без различно

когда уменьшаю количество union ов то запрос обробатываеться успешно
11 июл 14, 11:38    [16290884]     Ответить | Цитировать Сообщить модератору
 Re: Openquery With Parameters  [new]
Glory
Member

Откуда:
Сообщений: 104751
718
Кажется все же не без различно

наивный вы

718
когда уменьшаю количество union ов то запрос обробатываеться успешно

Вы для начала с тем же драйвером выполните тот же запрос из другого приложения
А потом уже делайте выводы
11 июл 14, 11:41    [16290904]     Ответить | Цитировать Сообщить модератору
 Re: Openquery With Parameters  [new]
718
Member

Откуда: Tashkent
Сообщений: 319
может вы и правы
всем спасибо за ответы
11 июл 14, 11:44    [16290930]     Ответить | Цитировать Сообщить модератору
 Re: Openquery With Parameters  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
718
Кажется все же не без различно

когда уменьшаю количество union ов то запрос обробатываеться успешно


ну еще бы:
BOL
OPENQUERY ( linked_server ,'query' )


Arguments
linked_server
Is an identifier representing the name of the linked server.

' query '
Is the query string executed in the linked server. The maximum length of the string is 8 KB.

11 июл 14, 12:22    [16291189]     Ответить | Цитировать Сообщить модератору
 Re: Openquery With Parameters  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
718
вот сам запрос что пытаюсь выполнить
[скрипт скипнут ]
Откройте для себя представления, ака, VIEW
11 июл 14, 12:24    [16291206]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить