2016-07-29 9 views
0

Während der Migration von Oracle zu PostgreSQL. Ich stoße auf ein Problem: Prozedur mit OUT-Parametern in einem PostgreSQL-Paket funktioniert nicht. Wann immer die Prozedur ausgeführt wird, heißt es Prozedur existiert nicht.Prozedur mit OUT-Parametern in einem PostgreSQL-Paket funktioniert nicht

CREATE OR REPLACE PACKAGE pkg_productdetails 
IS 
    Procedure p_getprod_details(in_locationid numeric, OUT cur_Product_typedetails refcursor, OUT cur_Productlist refcursor); 
END pkg_productdetails; 

CREATE OR REPLACE PACKAGE BODY pkg_productdetails 
IS 
    Procedure p_getprod_details(in_locationid numeric, OUT cur_Product_typedetails refcursor, OUT cur_Productlist refcursor) IS 
    BEGIN 
     OPEN cur_Product_typedetails FOR 
--select the cur_Product_typedetails ; 

OPEN cur_Productlist FOR 
--select the cur_Productlist; 

    END; 
END pkg_productdetails; 

, wenn ich diese Prozedur ausführen, sagen Sie es pkg_productdetails.p_getprod_details (numerisch) nicht existieren.

SELECT pkg_productdetails.p_getprod_details(10001); 
+0

@ a_horse_with_no_name ja, ich bin mit EnterpriseDB – Paarth

+0

Sie eine Prozedur aufrufen, die nur drei Parameter hat mit einem und zwei von ihnen sind OUT? Sie benötigen zwei Cursor-Variablen, die an diese Prozedur gesendet werden. – Mottor

+0

@Mottor, wenn wir diesen pacakge.procedure aus dem Code mit allen 3 Parametern aufrufen (1 IN und 2 OUT). Es gibt denselben Fehler. – Paarth

Antwort

0

Eine Arbeit um bekam ich mit dieser Situation zu umgehen Wenn wir Prozeduren Funktionen konvertieren, seine Arbeiten.

CREATE OR REPLACE PACKAGE pkg_productdetails 
IS 
    Function p_getprod_details(in_locationid numeric) RETURNS SETOF refcursor; 
END pkg_productdetails; 

CREATE OR REPLACE PACKAGE BODY pkg_productdetails 
IS 
    FUNCTION p_getprod_details(in_locationid numeric) RETURNS SETOF refcursor IS 
cur_Product_typedetails refcursor; 
cur_Productlist refcursor; 

    BEGIN 
    OPEN cur_Product_typedetails FOR 
--select the cur_Product_typedetails ; 
return next cur_Product_typedetails; 


OPEN cur_Productlist FOR 
--select the cur_Productlist; 
return next cur_Productlist; 

    END; 
END pkg_productdetails; 

, wenn ich dieses Paket Funktion ausführen, es funktioniert pkg_productdetails.p_getprod_details (numerisch).

SELECT pkg_productdetails.p_getprod_details(10001); 

Rückkehr <unnamed portal 1> und <unnamed portal 2>