database - 用于循环和记录的 PL/SQL 游标不起作用

标签 database plsql cursor record

我有以下问题。我正在尝试检查一个数字 (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/

相关文章:

php - MySQL 连接表与过滤器

sql - 如何为 n :m relations 设计历史记录

python - 尽管 update_idletasks() ,tkinter 光标直到操作后才发生变化

mysql - oracle 在更新和插入时触发

java - Swing 应用程序中的小点尾随光标

android - 使用 CursorAdapter 为 ListView 中的新行设置动画

mysql - 在评论系统中做一个 'count'栏是不是一个好办法?

asp.net - 如何在 asp .NET 中向数据库添加记录

mysql - 通过 SQL 命令显示 MySQL 主机

oracle - 从oracle sql中的表中获取数据