从Oracle迁移到PostgreSQL期间。我遇到一个问题: PostgreSQL包中的OUT参数无法正常工作的过程。每当运行该过程时,它都会说过程不存在。
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;
当我运行此程序时,它说 pkg_productdetails.p_getprod_details(数字)不存在。
SELECT pkg_productdetails.p_getprod_details(10001);
答案 0 :(得分:0)
我可以解决这个问题 如果我们将程序转换为函数,它的工作。
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;
当我运行这个包函数时,它正在运行pkg_productdetails.p_getprod_details(数字)。
SELECT pkg_productdetails.p_getprod_details(10001);
返回<unnamed portal 1>
和<unnamed portal 2>