Database 如何处理;“超过请求的行数”;在oraclepl/SQL中
我有一个代码,如果员工工作超过18年,则打印“是”,否则打印“否”。但我得到一个错误,告诉我“精确获取返回的行数超过请求的行数” 代码如下:Database 如何处理;“超过请求的行数”;在oraclepl/SQL中,database,plsql,oracle-sqldeveloper,Database,Plsql,Oracle Sqldeveloper,我有一个代码,如果员工工作超过18年,则打印“是”,否则打印“否”。但我得到一个错误,告诉我“精确获取返回的行数超过请求的行数” 代码如下: DECLARE currentDate NUMBER; hireDate NUMBER; BEGIN select EXTRACT(year from sysdate) into currentDate from dual; select EXTRACT(year from hire_date) into hire
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;
如何处理此错误?
谢谢 我想你需要WHERE子句来获得某个员工。 您可以直接在IF子句中使用函数EXTRACT(从sysdate算起的年份)。 您可以处理这样的异常,例如行太多,并且找不到数据:
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;
我想你需要WHERE子句来获得某个员工。 您可以直接在IF子句中使用函数EXTRACT(从sysdate算起的年份)。 您可以处理这样的异常,例如行太多,并且找不到数据:
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;