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

Откуда:
Сообщений: 390
Привет.

Использую Oracle GateWay 11.2 для MS SQL 2005. Имеется задача запускать в Oracle функции ms sql.

Коллеги, можете привести пример, где будет вызываться функция возвращающая строку - вызов через sp_cursoropen (SQL Profile смотрю и вижу что Oracle GateWay использует именно sp_cursoropen)?


Мои вариант:

create function own.repl (@p1 varchar(400)) returns varchar(400)
as
begin
    return @p1
end

declare @p1 int
set @p1=0
declare @p3 int
set @p3=4098
declare @p4 int
set @p4=8193
declare @p5 int
set @p5=0
declare @p8 varchar(400)
exec sp_cursoropen @p1 output,N' EXEC @P2=OWN.REPL @P1', @p3 output, @p4 output, @p5 output, N'@P1 varchar(400), @P2 varchar(400) output', 'ABC', @p8 output
select @p1, @p3, @p4, @p5, @p8

MS SQL выдает ошибку:
Msg 2809
The request for procedure 'REPL' failed because 'REPL' is a function object.

Может ли sp_cursoropen - открывать курсор на выполнение функции, если да, то приведите пожалуйста пример.

Спасибо!
26 ноя 11, 16:11    [11664082]     Ответить | Цитировать Сообщить модератору
 Re: sp_cursoropen 'exec function'  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8879
declare @p1 int
set @p1=0
declare @p3 int
set @p3=4098
declare @p4 int
set @p4=8193
declare @p5 int
set @p5=0
declare @p8 varchar(400)
exec sp_cursoropen @p1 output,N'select @P2=dbo.REPL (@P1)', @p3 output, @p4 output, @p5 output, N'@P1 varchar(400), @P2 varchar(400) output', 'ABC', @p8 output
select @p1, @p3, @p4, @p5, @p8
26 ноя 11, 17:38    [11664276]     Ответить | Цитировать Сообщить модератору
 Re: sp_cursoropen 'exec function'  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8879
(Отсутствует имя столбца)(Отсутствует имя столбца)(Отсутствует имя столбца)(Отсутствует имя столбца)d
0409881930ABC
26 ноя 11, 17:39    [11664280]     Ответить | Цитировать Сообщить модератору
 Re: sp_cursoropen 'exec function'  [new]
KIREAL
Member

Откуда:
Сообщений: 390
SIMPLicity_, Спасибо!

А можно написать процедуру что бы она вернула значение в @P2.

Например:


create procedure dbo.replp (@p1 varchar(400)) 
as
begin
    return @p1
end

Но в таком случае процедура вернет статуст выполнения, а не результат.
Интересует именно значение в @P2 = ,а не rowset который может вернуть процедура после замены :

return @p1

на

select @p1

Запускаем сие безобразие через:

declare @p1 int
set @p1=0
declare @p3 int
set @p3=4098
declare @p4 int
set @p4=8193
declare @p5 int
set @p5=0
declare @p8 varchar(400)
exec sp_cursoropen @p1 output,N' EXEC @P2=OWN.REPL @P1', @p3 output, @p4 output, @p5 output, N'@P1 varchar(400), @P2 varchar(400) output', 'ABC', @p8 output
select @p1, @p3, @p4, @p5, @p8

Спасибо!
28 ноя 11, 15:34    [11671809]     Ответить | Цитировать Сообщить модератору
 Re: sp_cursoropen 'exec function'  [new]
KIREAL
Member

Откуда:
Сообщений: 390
В общем можно сделать вывод, что запускать через Oracle Gateway to dblink можно только процедуры возвращающие тип данных int. Функции вообще не запускаются, из-за неверного синтаксиса использования в sp_cursoropen.
2 дек 11, 11:29    [11694532]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить