如何在Oracle PL / SQL中处理“超过请求的行数”

内森·克莱罗(Nathan Klero)

如果员工工作超过18年,我有一个代码会显示“是”,否则显示“否”。但是我收到一条错误消息,提示“确切的提取返回的行数超过了请求的行数”。

这是代码:

DECLARE 
    currentDate NUMBER;
    hireDate NUMBER;
BEGIN
      select EXTRACT(year from sysdate) into currentDate from dual;
      select EXTRACT(year from hire_date) into hireDate from employees;
      
    IF (currentDate - hireDate) > 18 THEN
       DBMS_OUTPUT.PUT_LINE('YES');
    ELSE
       DBMS_OUTPUT.PUT_LINE('NO');
    
    END IF;

END;

如何处理此错误?

谢谢!

谢尔盖·阿菲诺根诺夫(Sergey Afinogenov)

我想您需要WHERE子句才能获得某些雇员。您可以直接在IF子句中使用函数EXTRACT(sysdate年)。并且您可以处理诸如TOO_MANY_ROWS和NO_DATA_FOUND之类的异常:

DECLARE
  hireDate NUMBER;
BEGIN

  SELECT EXTRACT(year from hire_date)
    INTO hireDate
    FROM employees
   WHERE employee_id = &empId;

  IF (EXTRACT(year from sysdate) - hireDate) > 18 
  THEN
    DBMS_OUTPUT.PUT_LINE('YES');
  ELSE
    DBMS_OUTPUT.PUT_LINE('NO');
  END IF;

EXCEPTION
  WHEN NO_DATA_FOUND then
    DBMS_OUTPUT.PUT_LINE('Caught raised exception NO_DATA_FOUND');
  WHEN TOO_MANY_ROWS then
    DBMS_OUTPUT.PUT_LINE('Caught raised exception TOO_MANY_ROWS');
  WHEN OTHERS then
    RAISE_APPLICATION_ERROR(-20002, SQLERRM || ' on select employees');
END;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

PL/SQL 获取超过请求的行数

如何在Java或Oracle PL / SQL中读取DBase文件

“如何在oracle pl / sql中修复触发器?

如何在 Oracle (PL/SQL) 中创建动态 where 子句

如何在 JSON 路径(Oracle PL SQL)中插入变量?

如何在Oracle PL SQL中将列名显示为行

Oracle PL/SQL 如何在巴黎获得时间?

如何在Oracle PL / SQL的类型定义中使用常量?

如何在Oracle PL / SQL函数中使用变量

准确的提取返回的数据超过了请求的行数(PL / SQL)

Oracle 不是 pl/sql

功能PL / SQL ORACLE

如何在Oracle中使用PL / SQL或SQL查询将新行插入查询结果中?

如何在Oracle中的PL / SQL中定义全局变量?

如何在PL SQL中引发异常?

如何在Oracle PL-SQL中的select语句中使用变量

如何在Oracle PL / SQL 11G中声明数字数组

如何在其他pl / sql块中使用Oracle db中的信息输出?

如果尚不存在,如何在Oracle PL / SQL中创建新的对象类型

如何在Oracle PL / SQL查询中动态获取字段名称?

如何在Oracle APEX 4.2的PL / SQL进程中调用函数

如何在Oracle PL / SQL中实现AFTER INSERT触发器?

如何在PL / SQL ORACLE中强制退出另一个函数?

如何在Dbms_output.put_line('')中使用<br>标记;在PL / SQL Oracle中?

在 Oracle PL/SQL 中解码

如何检查Oracle PL / SQL Developer的时区

Oracle中SOAP请求的PL / SQL复杂类型

如何在Oracle的PL/SQL语句中使用php变量

如何在Oracle PL / SQL游标FOR循环中使用庞大的未命名列?