我有以下问题。我正在尝试检查一个数字 (bsn),它是否在数据库中。如果它不在数据库中,它应该给我一个错误,但是现在我总是得到一个错误,即使数据库中存在该数字。它在数据库中只有一个数字时工作正常,但有更多...这就是问题所在。哦,我正在使用 APEX,所以我将其用作流程。
create or replace PROCEDURE CONTROLE_BSN IS
CURSOR c_klanten
IS
SELECT bsn
FROM klant;
v_bsn VARCHAR2(10) := V('P7_BSN');
e_geen_bsn EXCEPTION;
BEGIN
FOR r_record IN c_klanten
LOOP
IF r_record.bsn != v_bsn THEN
RAISE e_geen_bsn;
END IF;
END LOOP;
EXCEPTION
WHEN e_geen_bsn THEN
raise_application_error(-20001, 'This bsn-number does not exists.');
END CONTROLE_BSN;
最佳答案
你的逻辑很流畅。一旦您的表中有两个不同的 bsn
,您的测试将至少对其中一个为真:
FOR r_record IN c_klanten
LOOP
IF r_record.bsn != v_bsn THEN --< when N different records,
-- this is true for at least N-1 of them
RAISE e_geen_bsn;
END IF;
END LOOP;
也许你应该选择比这简单一点的东西。为什么不这样写你的光标:
CURSOR c_klanten
IS
SELECT count(*) n
FROM klant
WHERE nbc = v_bsn;
这样,你就很容易得到匹配的bsn
的编号。 0、1 或更多。然后执行适当的操作。
关于database - 用于循环和记录的 PL/SQL 游标不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26672370/