编写程序以显示各部门名称和该部门包含的员工姓名。要求使用显式的循环游标实现。 效果如下:(定义两个游标双重循环,没有员工的部门不要显示) oralce
时间: 2024-09-20 19:13:16 浏览: 38
在Oracle数据库中,要编写这样的程序,你可以使用PL/SQL(过程化SQL)语言,它允许在存储过程中使用显式游标来遍历数据。假设我们有两个表,一个是`departments`(部门信息)和另一个是`employees`(员工信息),并且每个员工都有一个部门ID。
首先,我们需要声明两个游标,一个用于查询部门信息,另一个用于查询部门内的员工。然后,我们可以通过外连接查询并逐行检查是否有员工,如果没有,则跳过显示。
这是一个简单的示例:
```sql
DECLARE
cursor_dept DEPARTMENT CURSOR FOR
SELECT department_name FROM departments;
cursor_employees EMPLOYEE_CURSOR OF employees%ROWTYPE;
BEGIN
OPEN cursor_dept;
LOOP
FETCH cursor_dept INTO dept_name; -- 部门名称
IF SQL%NOTFOUND THEN
EXIT; -- 没有更多部门,退出循环
END IF;
OPEN cursor_employees FOR SELECT employee_name FROM employees WHERE department_id = cursor_dept.department_id;
IF cursor_employees%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('部门 ' || dept_name || ' (无员工)');
ELSE
DBMS_OUTPUT.PUT_LINE('部门 ' || dept_name);
LOOP
FETCH cursor_employees INTO employee_name;
EXIT WHEN cursor_employees%NOTFOUND; -- 结束当前员工的显示
DBMS_OUTPUT.PUT_LINE(' - ' || employee_name);
END LOOP;
END IF;
CLOSE cursor_employees; -- 关闭员工游标
END LOOP;
CLOSE cursor_dept; -- 关闭部门游标
END;
/
```
运行这个存储过程,你会看到所有部门及其包含的员工(如果有)。如果某个部门没有员工,它将只显示"部门 [部门名] (无员工)"。
阅读全文