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

Откуда:
Сообщений: 60
Имеется сервер MS SQL к которому прилинкован Oracle.
Запускаю на MS SQL
declare
@Acc varchar(30),
@CurrencyTag varchar(3),
@CardNumber varchar(16)

set @Acc='26207003346621'
set @CurrencyTag='USD'
  
EXECUTE ( 'SELECT MAX(c.CARDNUM) AS CARDNUM
			FROM CARDS c
			WHERE c.AccId IN
				(SELECT  
					a.AccId 
                    FROM   IC.Accounts a,
                    IC.Agreements g 
                    WHERE a.ContractId      = g.ContractId
                    AND a.ubalnum = 2625
                    AND SUBSTR(g.reserved1, 1, 14)  =  ?
                    AND  a.CCyCharId=?)'
                    ,@Acc,@CurrencyTag)  at  ISCARDPROD

Работает,возвращает таблицу с одним полем и одной записью.

Теперь требуется результат записать в переменную @CardNumber
Как это сделать?
28 апр 16, 18:33    [19118943]     Ответить | Цитировать Сообщить модератору
 Re: Получить результат запроса с ORACLE  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
DECLARE @t TABLE (val INT)
INSERT INTO @t
EXEC(...)

SELECT @CardNumber = val
FROM @t
28 апр 16, 18:49    [19119007]     Ответить | Цитировать Сообщить модератору
 Re: Получить результат запроса с ORACLE  [new]
Roman35
Member

Откуда:
Сообщений: 60
AlanDenton,
Да? такой вариант я рассматривал,но хочется как то покрасивее. Например както так
declare
@Acc varchar(30),
@CurrencyTag varchar(3),
@CardNumber varchar(16)

set @Acc='26207003346621'
set @CurrencyTag='USD'

EXECUTE ( 'SELECT ?=MAX(c.CARDNUM) AS CARDNUM
FROM CARDS c
WHERE c.AccId IN
(SELECT
a.AccId
FROM IC.Accounts a,
IC.Agreements g
WHERE a.ContractId = g.ContractId
AND a.ubalnum = 2625
AND SUBSTR(g.reserved1, 1, 14) = ?
AND a.CCyCharId=?)'
,@CardNumber OUTPUT,@Acc,@CurrencyTag) at ISCARDPROD

Но не работает.
28 апр 16, 19:08    [19119114]     Ответить | Цитировать Сообщить модератору
 Re: Получить результат запроса с ORACLE  [new]
Glory
Member

Откуда:
Сообщений: 104760
Roman35
Например както так

А Oraсle разве имеет такой синтаксис SELECT ?=MAX(c.CARDNUM) AS CARDNUM ?
28 апр 16, 19:33    [19119204]     Ответить | Цитировать Сообщить модератору
 Re: Получить результат запроса с ORACLE  [new]
Roman35
Member

Откуда:
Сообщений: 60
AlanDenton,
Сделал вот так

declare
@Acc varchar(30),
@CurrencyTag varchar(3),
@CardNumber varchar(16)

set @Acc='26207003346621'
set @CurrencyTag='USD'
DECLARE @t TABLE (CardNumber varchar(16))

INSERT INTO @t(CardNumber)

EXECUTE ( 'SELECT MAX(c.CARDNUM) as CARDNUM
			FROM CARDS c
			WHERE c.AccId IN
				(SELECT  
					a.AccId 
                    FROM   IC.Accounts a,
                    IC.Agreements g 
                    WHERE a.ContractId      = g.ContractId
                    AND a.ubalnum = 2625
                    AND SUBSTR(g.reserved1, 1, 14)  =  ?
                    AND  a.CCyCharId=?)'
                    ,@Acc,@CurrencyTag)  at  ISCARDPROD


Выдает ошибку
OLE DB provider "OraOLEDB.Oracle" for linked server "ISCARDPROD" returned message "New transaction cannot enlist in the specified transaction coordinator. ".
Msg 7391, Level 16, State 2, Line 30
The operation could not be performed because OLE DB provider "OraOLEDB.Oracle" for linked server "ISCARDPROD" was unable to begin a distributed transaction.
29 апр 16, 16:45    [19123000]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить