Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plsql PL/SQL过程,游标,where子句_Plsql_Cursor_Where Clause - Fatal编程技术网

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

Plsql PL/SQL过程,游标,where子句,plsql,cursor,where-clause,Plsql,Cursor,Where Clause,我有一些客户id、姓名和姓氏的数据库。我用一些参数制作了这个程序,其中包括带参数的游标。我想用光标显示客户的名字,姓氏,id。我想显示,在我调用过程的地方,比如我在过程中写为参数,比如NULL NULL,它会显示所有记录。接下来,如果我写NULL,姓氏,它会显示带有该姓氏的记录。如果我写firstname,NULL,它只显示具有该名字的记录,如果我写firstname,lastname,它只显示与此匹配的记录。所以我的程序运行得很好,但我需要右where子句n cursor。这是我的光标 CRE

我有一些客户id、姓名和姓氏的数据库。我用一些参数制作了这个程序,其中包括带参数的游标。我想用光标显示客户的名字,姓氏,id。我想显示,在我调用过程的地方,比如我在过程中写为参数,比如NULL NULL,它会显示所有记录。接下来,如果我写NULL,姓氏,它会显示带有该姓氏的记录。如果我写firstname,NULL,它只显示具有该名字的记录,如果我写firstname,lastname,它只显示与此匹配的记录。所以我的程序运行得很好,但我需要右where子句n cursor。这是我的光标

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,但我只需要右WHERE子句!谢谢你

你可以把
NVL
结合使用

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

如果函数
NVL
不是
NULL
,则返回第一个参数。
否则它将返回第二个参数。

不起作用,仅针对Firstname、lastname。根据您的问题,这不是您想要的吗?能够搜索名字和姓氏吗?你还需要什么?我需要如果我写test_-two(NULL,'name'),它显示我与该sruname匹配的记录,如果我写test_-two('firstname',NULL),它显示我与该firstname匹配的记录,如果我写test_-two(NULL,NULL),它显示我所有的记录,如果我写test_-two('firstname','Jurica'))它又给我看了,好吧,我说对了。我还没有测试过这段代码,但它应该可以工作。你遇到了什么问题?如果调用
test_-two(NULL,NULL),是否显示任何记录?或者当您试图编译它时是否有错误消息?我刚才看到您正在使用
dbms\u output.put\u line
。在调用该过程之前,不要忘记使用
set serveroutput on
启用服务器输出