2016-05-13 13 views
0

Ich bin derzeit auf Sybase ASE 15.7 und schreibe eine gespeicherte Prozedur, die das Ergebnis eines anderen SP verwendet. Ich möchte es aufrufen und das Ergebnis in eine temporäre Tabelle einfügen, so dass keine Änderung für den ursprünglichen SP erforderlich ist.Wie füge ich die Ergebnismenge einer gespeicherten Prozedur in eine temporäre Tabelle ein und erhalte die Ausgabeparameter in Sybase?

zu diesem Beitrag verweis: How can I get data from a stored procedure into a temp table?

Jakub Antwort mit Proxy-Tabellen funktioniert perfekt mit der Probe SP Definition:

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

Allerdings gibt es noch ein letztes Stück fehlt! Wie erhalten Sie die Ausgabeparameter UND das Ergebnis? Der SP in meinem Fall ist definiert wie folgt aus:

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 

I definiert würden und verwendet, um die Proxy-Tabellen wie folgt:

--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 

Während die Ergebnismenge erfolgreich zurückgeführt werden kann, @errcode/_errcode ist immer Null. Wie kann ich einen Ausgabeparameter in einer Proxy-Tabelle definieren?

Antwort

0

Es truns out sogar Erstellen von Proxy-Tabellen sind nicht in gespeicherten Prozeduren zulässig. Der folgende Fehler wird angezeigt:

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

Also ich denke, in Sybase sp es keine Möglichkeiten, um die Ergebnisdaten eines anderen sp eingestellt zu verwenden, ohne das Original zu verändern. Leider scheint es, als ob die einzige Möglichkeit übrig bleibt, das orignal sp (das 1.4k Zeilen hat) zu kopieren.