2016-05-13 2 views
0

В настоящее время я нахожусь в Sybase ASE 15.7 и записываю хранимую процедуру, которая использует результат другого SP. Я хотел бы назвать это и вставить результат в временную таблицу, поэтому для исходного SP не требуется никаких изменений.Как вставить результирующий набор хранимой процедуры в временную таблицу И получить выходные параметры в Sybase?

Отсносящийся на этот пост: How can I get data from a stored procedure into a temp table?

ответ Якуба, используя прокси-таблицы отлично работает с определением образца SP:

create procedure mydb.mylogin.sp_extractSomething (
@timestamp datetime) as 
select column_a, column_b 
    from sometable 
    where timestamp = @timestamp 

Однако есть один последний кусок отсутствует! Как вы получаете выходные параметры и набор результатов? SP в моем случае определяется как следующее:

create procedure mydb.mylogin.sp_extractSomething 
(
    @timestamp datetime, 
    @errcode char(10) output 
) as 
    select @errcode='NOERR' 
    select column_a, column_b 
     from sometable 
     where timestamp = @timestamp  
    if (@@rowcount = 0) 
    begin 
     select @errcode = 'ERR001' 
    end 

Я бы определить и использовать таблицы прокси следующим образом:

--create proxy table 
create existing table myproxy_extractSomething (
column_a int not null, 
column_b varchar(20) not null, 
_timestamp datetime null, 
_errcode char(10) null) external procedure at "loopback.mydb.mylogin.sp_extractSomething" 

--calling sp 
declare @errcode Char 
declare @myTimestamp datetime 
set @myTimestamp = getdate() 

select * 
from myproxy_extractSomething 
where _timestamp = @myTimestamp 
and _errcode = @errcode 
select @errcode 

В то время как набор результатов может быть возвращен успешно, @errcode/_errcode является всегда null. Как определить выходной параметр в таблице прокси?

ответ

0

Выходит, даже создание прокси-таблиц не допускается в хранимых процедурах. Следующее сообщение об ошибке появится:

Statement with location clause must be the only statement in a query batch 

Так что я думаю, в Sybase SP нет способов использовать результирующий набор данных другого зр, не изменяя оригинал. К сожалению, кажется, что единственный путь - копирование orignal sp (у которого есть 1.4k строк).