PL/SQL 过程、游标、where 子句

PL/SQL procedure, cursor, where clause

我有一些包含客户 ID、姓名、姓氏的数据库。我用一些参数制作了过程,其中包括带参数的游标。我想用那个光标显示客户姓名、姓氏、身份证。我想表明,在我调用过程的地方,例如我在过程中写为参数,例如 NULL NULL,它会显示所有记录。接下来,如果我写 NULL,Surname,它会显示带有该姓氏的记录。如果我写 firstname,NULL,它只显示记录有那个名字的记录,如果我写 Firstname,lastname,它只显示匹配这个的记录。所以我的程序工作正常,但我需要正确的 where 子句 n 游标。这是我的光标

CREATE OR REPLACE PROCEDURE test_two(c_f_name VARCHAR2,c_l_name VARCHAR2) IS

CURSOR c2(f_name VARCHAR2,l_name VARCHAR2) IS
 SELECT cus_id,cus_l_name,cus_f_name
 FROM CUSTOMER
 WHERE (cus_f_name IS NOT NULL AND (cus_f_name = f_name orcus_l_name
 IS NULL)) 
  AND   (cus_l_name IS NOT NULL AND (cus_l_name = l_name or cus_f_name IS
 NULL));
  v_complex   c2%ROWTYPE;
 lv_show   VARCHAR2(20);
 f_name    VARCHAR2(20) := c_f_name;
 l_name    VARCHAR2(20) := c_l_name;

BEGIN
  open c2(f_name,l_name);
  LOOP
  FETCH c2 INTO v_complex;
  dbms_output.put_line(v_complex.cus_id|| ' ' ||v_complex.cus_f_name|| ' '   
 ||v_complex.cus_l_name);
  EXIT WHEN c2%NOTFOUND;

END LOOP;
 CLOSE c2;
END;

该程序中的一切都是 IFNE,但我只需要 RIGHT WHERE 条款!谢谢

您可以使用 LIKENVL 的组合。

 WHERE cus_f_name LIKE NVL(c_f_name, '%')
   AND cus_l_name LIKE NVL(c_l_name, '%');

解释:

函数NVL returns第一个参数如果不是NULL。 否则它 returns 第二个参数。