【问题标题】:PL/SQL - No Data Found error [duplicate]PL/SQL - 未找到数据错误 [重复]
【发布时间】:2014-03-30 09:55:15
【问题描述】:

当我尝试运行以下块时,我收到此错误“ORA-01403: no data found”。

SET SERVEROUTPUT ON

DECLARE
  TYPE dept_table_type IS TABLE OF departments.department_name%TYPE
  INDEX BY PLS_INTEGER;
  my_dept_table dept_table_type;
  f_loop_count NUMBER(2) :=10;
  v_deptno NUMBER(5) :=0;
BEGIN
  FOR i IN 1..f_loop_count LOOP
      v_deptno := v_deptno + 10;
    SELECT department_name
    INTO my_dept_table(i)
    FROM departments
    WHERE department_id = v_deptno;
  END LOOP;
  FOR i IN 1..f_loop_count LOOP
    DBMS_OUTPUT.PUT_LINE(my_dept_table(i));
  END LOOP;
END;
/

我对这个问题不是 100% 确定的。我唯一能想到的是在 DECLARE 块中它没有正确执行 INDEX 部分 - 尽管我不确定如何让它工作。

干杯

【问题讨论】:

  • 嗯,这意味着您的选择语句不会为您的 v_deptno 值之一返回任何内容。

标签: oracle for-loop plsql indexing


【解决方案1】:

Oracle,当看到 Selected 查询的 No data 并且您尝试将其放入变量中时,最终会抛出异常。因为,INTO 变量现在保持不变,开发人员必须相应地处理它!

DECLARE
  TYPE dept_table_type IS TABLE OF departments.department_name%TYPE
  INDEX BY PLS_INTEGER;
  my_dept_table dept_table_type;
  f_loop_count NUMBER(2) :=10;
  v_deptno NUMBER(5) :=0;
BEGIN
  FOR i IN 1..f_loop_count LOOP
      v_deptno := v_deptno + 10;
      BEGIN
        SELECT department_name
        INTO my_dept_table(i)
        FROM departments
        WHERE department_id = v_deptno;
      EXCEPTION WHEN NO_DATA_FOUND THEN
         DBMS_OUTPUT.PUT_LINE('No Data for ' || v_deptno);
         my_dept_table(i) := NULL;
         --Flow continues
      END;
  END LOOP;
  FOR i IN 1..f_loop_count LOOP
    DBMS_OUTPUT.PUT_LINE(my_dept_table(i));
  END LOOP;
END;
/

【讨论】:

  • 我明白了,这超出了 Oracle Database PLSQL Fundamentals 教科书的内容,它没有说明某些不存在的部门 ID,或者至少它们已被修改。我什至没有想到要放入异常。非常感谢:)
猜你喜欢
  • 2013-12-27
  • 2018-04-15
  • 2015-08-09
  • 2016-06-02
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
相关资源
最近更新 更多