当第一个参数设置了默认值时,如何在打开游标时直接指定第二个参数

时间:2018-01-31 20:01:35

标签: sql oracle plsql cursor oracle-sqldeveloper

我遇到过这种情况,我为游标的第一个参数提供了一个默认值,并简单地声明了第二个参数,如代码片段所示。 我想在打开游标时跳过输入第一个参数值,只传递第二个参数的值。 有没有办法做到这一点? 如果我只是输入一个逗号和第二个参数值或只是第二个参数值,我会收到错误。

 SET SERVEROUTPUT ON;
    DECLARE 
        VEID TMP_EMPLOYEES.NAME%TYPE;
        CURSOR CURF(VID VARCHAR2:=5,vname varchar2) IS--default value set
        SELECT NAME FROM TMP_EMPLOYEES
        WHERE ID<VID and name like'%'||vname||'%';
    BEGIN 
        OPEN CURF('4','ra');-- I just want to pass 'ra'
        LOOP
        FETCH CURF INTO VEID;

        EXIT WHEN CURF%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(VEID);
        END LOOP;
        CLOSE CURF;
        DBMS_OUTPUT.PUT_LINE('DONE');
    END;  

1 个答案:

答案 0 :(得分:1)

使用命名表示法,您可以阐明要传递给正在调用的游标/过程/函数的参数。

以下调用会产生相同的结果:

CURF('4', 'ra')
CURF(vid => '4', vname => 'ra')
CURF(vname => 'ra', vid => '4') -- Order of named arguments don't matter
CURF('4', vname => 'ra') -- Mixing ordered and named arguments

通过使用命名表示法,您可以省略具有默认值的参数,即CURF(vname => 'ra')将给出想要的结果