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