【发布时间】:2021-12-26 10:52:47
【问题描述】:
编写一个 PLSQL 块来获取分配给 EMP 表中员工的不同部门 ID。部门详细信息,例如部门名称和所有需要从部门表中检索。此处不遵循 SQL 完整性约束,因此您可能会发现 DEPT 表中不可用的记录。确保处理所有必需的异常以处理这些记录。
架构详细信息是:
TABLE NAME COLUMN NAMES ------------ ------------------------------------------------- DEPT DEPT_HEAD, DEPT_ID, DEPT_NAME EMP DEPT_ID, EMP_ACTIVEFROM, EMP_DOB, EMP_FNAME, EMP_ID, EMP_LNAME, EMP_SAL, EMP_STATUS, EMP_TERMINATIONDATE, LOC_ID, MGR_ID
我已经编写了代码,但每次运行时,输出都与问题中的要求相似,但未通过测试用例。
我的代码:
SET SERVEROUTPUT ON
DECLARE
l_dept_name dept.dept_name%type;
BEGIN
for cur_r in(select distinct e.dept_id from EMP e)
loop
begin
select d.dept_name into l_dept_name from DEPT d where d.dept_id = cur_r.dept_id;
dbms_output.put_line('Dept ID: '|| cur_r.dept_id||' is '||l_dept_name);
exception
when NO_DATA_FOUND then
dbms_output.put_line('Dept ID: '|| cur_r.dept_id ||' is not a valid ID');
end;
end loop;
END;
/
EXIT;
【问题讨论】:
-
你不需要这个循环(包含另一个
SELECT)。可以调整光标以仅返回EXISTS在emp.dept_id中的那些dept_id值。使用WHERE EXISTS (...)时不需要DISTINCT。 -
您的问题不包括测试要求的一些细节。您可以使用
OUTER JOIN来检测缺失的案例。 -
答案更新了错误的程序和更正的程序。我没有替换您额外的
SELECT语句。我只是按原样使用它们,稍作调整以从光标引用新的isexists派生列。 -
也许程序没有问题,看起来还不错。问题可能是您的结果没有足够的信息。 IE。你没有达到要求。要求清楚地说明了部门详细信息,例如部门名称和所有需要检索的内容。这似乎是说输出必须有 DEPT_HEAD、DEPT_ID、DEPT_NAME。你试过吗?
标签: sql oracle exception plsql plsqldeveloper