我想编写一个输入参数为单个或多个值的过程,并根据输入返回一个ref游标

时间:2019-06-24 09:20:47

标签: oracle plsql

我想实现如下:

CREATE OR REPLACE PROCEDURE INPUT_XML (v_sne_id varchar2(10) -- input can be single or multiple values, 
                              v_card_name varchar2(10) DEFAULT NULL, 
                              v_port_no varchar2(10) DEFAULT NULL, 
                              v_refcur OUT SYS_REFCURSOR)

AS

BEGIN
IF (card_name is null and port_no is null )
then
open v_refcur for
select * from table where sne_id in (all the input sneId(s) );
end if;
END INPUT_XML:

1 个答案:

答案 0 :(得分:3)

您可以使用TYPE函数创建和使用用户定义的集合TABLE

类型

CREATE OR REPLACE TYPE sne_id_type IS TABLE OF varchar2(10);

程序

CREATE OR REPLACE PROCEDURE input_xml (
     v_sne_id    sne_id_type,  --use the parameter of the collection type
     v_card_name VARCHAR2 DEFAULT NULL,
     v_port_no   VARCHAR2 DEFAULT NULL,
     v_refcur    OUT      SYS_REFCURSOR
) AS
BEGIN
     IF ( v_card_name IS NULL AND v_port_no IS NULL ) THEN
          OPEN v_refcur FOR SELECT *
                            FROM tablename
                            WHERE sne_id IN ( SELECT column_value
                                              FROM TABLE ( v_sne_id )
                                            );

     END IF;
END input_xml;
/

要在执行时传递多个值,可以这样做

BEGIN
  INPUT_XML(sne_id_type('ID1','ID2','ID3'), 'CARD', null,null);
END;
/