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

时间:2017-05-09 08:02:49

标签: plsql 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在那个程序,但我只需要正确的条款!谢谢你

1 个答案:

答案 0 :(得分:0)

您可以使用LIKENVL的组合。

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

说明:

如果NVL不是NULL,则函数List<WebWindow> webWindows = client.getWebWindows(); WebWindow webWindow = webWindows.get(0); HtmlPage page = (HtmlPage) webWindow.getEnclosedPage(); 将返回第一个参数。 否则返回第二个参数。