编写PLSQL块查询EMP表中员工关联的去重部门ID及对应名称并校验有效性
PLSQL 部门ID匹配查询实现脚本
需求说明
- 提取EMP表中所有分配给员工的不重复部门ID
- 匹配DEPT表查询对应部门名称
- 输出规则:
- 有效部门ID输出格式:
Dept ID:*** is 部门名称 - 无效部门ID输出格式:
Dept ID:*** is not a valid ID
- 有效部门ID输出格式:
实现代码
DECLARE -- 声明游标:关联EMP去重部门ID和DEPT表部门名称 CURSOR c_dept_info IS SELECT DISTINCT e.deptno AS dept_id, d.dname AS dept_name FROM emp e LEFT JOIN dept d ON e.deptno = d.deptno; -- 声明行变量存储游标查询结果 v_dept_row c_dept_info%ROWTYPE; BEGIN DBMS_OUTPUT.PUT_LINE('Output'); -- 遍历游标 OPEN c_dept_info; LOOP FETCH c_dept_info INTO v_dept_row; EXIT WHEN c_dept_info%NOTFOUND; -- 判断部门是否有效 IF v_dept_row.dept_name IS NOT NULL THEN DBMS_OUTPUT.PUT_LINE('Dept ID:' || v_dept_row.dept_id || ' is ' || v_dept_row.dept_name); ELSE DBMS_OUTPUT.PUT_LINE('Dept ID:' || v_dept_row.dept_id || ' is not a valid ID'); END IF; END LOOP; CLOSE c_dept_info; END; /
代码说明
- 运行前请先执行
SET SERVEROUTPUT ON;开启输出开关,否则看不到打印内容 - 用左连接关联EMP和DEPT表,一次性拿到所有去重的部门ID和对应的部门名称,避免循环内查询降低效率
- 用游标遍历查询结果,通过判断部门名称是否为空区分有效/无效ID,无需额外捕获异常,逻辑更简洁
输出示例
Output Dept ID:10 is ACCOUNTING Dept ID:20 is RESEARCH Dept ID:30 is SALES Dept ID:40 is not a valid ID
内容的提问来源于stack exchange,提问作者Arsha
相关产品推荐
相关产品推荐

