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



我想如下实现:

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:

您可以使用TABLE函数创建并使用用户定义的TYPE

类型

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

最新更新