【问题标题】:delete rows from the employee table从员工表中删除行
【发布时间】:2020-09-22 07:00:01
【问题描述】:

创建一个从员工表中删除行的过程。它应该接受1个参数,部门名称;只删除属于该部门的员工记录。显示删除了多少员工,否则引发“DeptNotFoundException”并打印消息“未找到记录”。

Employee:

column name      datatype      constraints
EMP_ID           NUMBER(5)     PK
EMP_NMAE         VARCHAR2(25)  NOT NULL
SALARY           NUMBER(10,2) 
DEPT             VARCHAR2(25)

EMP_ID  EMP_NAME   SALARY    DEPT
101     JOHN       54000     MECH
102     TOM        43000     CSE
103     WILLIAM    34560     MECH
104     STEVE      56000     CSE
105     SMITH      23450     IT

我的代码是,

set serveroutput on;

create or replace procedure delete_EMPLOYEE(dept_name in EMPLOYEE.dept%type) is

deptnotfound EXCEPTION;

begin

delete from EMPLOYEE where dept=dept_name;

if (sql%found) then

dbms_output.put_line(sql%rowcount || 'Employee record(s) got deleted.');

else

raise DeptNoFound;

end if;

EXCEPTION

when DeptNoFound then

dbms_output.put_line('No Records Found.');

end delete_EMPLOYEE;

/

它编译成功但不是测试用例。只通过了 1 个测试用例,而不是 2 个。谁能帮帮我,拜托....

【问题讨论】:

  • 什么“测试用例”?程序看起来不错并且工作正常。如果您发布您的测试方式会有所帮助。
  • @要分享失败的测试用例场景吗?

标签: oracle plsql


【解决方案1】:
SET SERVEROUTPUT ON;
CREATE OR RPLACE PROCEDURE DELETE_EMPLOYEE(V_DEPT IN EMPLOYEE.DEPT%TYPE)
IS
DEPTNOTFOUNDEXCEPTION EXCEPTION;
BEGIN
DELETE FROM EMPLOYEE WHERE DEPT = V_DEPT;
IF SQL%FOUND THEN
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' EMPLOYEE RECORS(S) GOT DELETED.');
ELSE
RAISE DEPTNOTFOUNDEXCEPTION;
END IF;
EXCEPTION
WHEN DEPTNOTFOUNDEXCEPTION THEN
DBMS_OUTPUT.PUT_LINE('NO RECORDS FOUND.');
END;
/

【讨论】:

    【解决方案2】:

    您已声明异常 deptnotfound,但在引发异常时您将其拼写错误为 deptnofound。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多