我遇到过这种情况,我为游标的第一个参数提供了一个默认值,并简单地声明了第二个参数,如代码片段所示。 我想在打开游标时跳过输入第一个参数值,只传递第二个参数的值。 有没有办法做到这一点? 如果我只是输入一个逗号和第二个参数值或只是第二个参数值,我会收到错误。
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;
答案 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')
将给出想要的结果