plsql实践题

/*
编写一个 PL/SQL 块,它使用游标遍历 emp 表,计算部门编号为 30 的所有员工工资的总和。
程序需要使用:
游标 来获取部门编号为 30 的员工。
记录类型 来存储每条记录的数据。
循环 来逐行处理游标结果。
游标的属性(例如 %ROWCOUNT、%FOUND、%NOTFOUND)来控制循环和输出信息。
要求:
声明一个游标,选择 deptno = 30 的所有员工的 empno、ename 和 sal。
定义一个记录类型,用来存储每次提取的员工记录。
使用 FOR 或 WHILE 循环 遍历游标并计算工资总和。
在循环结束后,输出 部门 30 的工资总和以及部门内的员工数量(使用 %ROWCOUNT 属性)。
确保使用游标的属性 来控制退出条件(使用 %NOTFOUND 或 %FOUND)。
*/

基础代码

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD';

CREATE TABLE emp (
  empno NUMBER(5) NOT NULL,
  ename VARCHAR2(20) NOT NULL,
  job VARCHAR2(9) NOT NULL,
  mgr NUMBER(5),
  hiredate DATE NOT NULL,
  sal NUMBER(7,2) NOT NULL,
  comm NUMBER(7,2),
  deptno NUMBER(5) NOT NULL
)TABLESPACE my_tablespace;

INSERT INTO emp VALUES (7369, 'SMITH', 'CLERK', 7902, '1990-12-17', 800.00, NULL, 20);
INSERT INTO emp VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1991-02-20', 1600.00, 300.00, 30);
INSERT INTO emp VALUES (7521, 'WARD', 'SALESMAN', 7698, '1991-02-22', 1250.00, 500.00, 30);
INSERT INTO emp VALUES (7566, 'JONES', 'MANAGER', 7839, '1991-04-02', 2975.00, NULL, 20);
INSERT INTO emp VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1991-09-28', 1250.00, 1400.00, 30);
INSERT INTO emp VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1991-05-01', 2850.00, NULL, 30);
INSERT INTO emp VALUES (7782, 'CLARK', 'MANAGER', 7839, '1991-06-09', 2450.00, NULL, 10);
INSERT INTO emp VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1997-04-19', 3000.00, NULL, 20);
INSERT INTO emp VALUES (7839, 'KING', 'PRESIDENT', NULL, '1991-11-17', 5000.00, NULL, 10);
INSERT INTO emp VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1991-09-08', 1500.00, NULL, 30);
INSERT INTO emp VALUES (7900, 'JAMES', 'CLERK', 7698, '1991-12-03', 950.00, NULL, 30);
INSERT INTO emp VALUES (7902, 'FORD', 'ANALYST', 7566, '1991-12-03', 3000.00, NULL, 20);
INSERT INTO emp VALUES (7934, 'MILLER', 'CLERK', 7782, '1992-01-23', 1300.00, NULL, 10);
COMMIT;
SELECT * FROM emp;

结果代码

declare
v_total_sal number:=0;
v_total_count number:=0;
cursor emp_cursor is select empno,ename,sal from emp where deptno=30;
v_emp_record emp_cursor%rowtype;
begin
  
open emp_cursor;
fetch emp_cursor into v_emp_record;
while emp_cursor%found loop
  
  v_total_sal :=v_total_sal+v_emp_record.sal;
  v_total_count:=v_total_count+1;
  dbms_output.put_line('员工编号:'||v_emp_record.empno||
  ',员工姓名:'||v_emp_record.ename||',工资:' ||v_emp_record.sal);
  fetch emp_cursor into v_emp_record;
  end loop;
  close emp_cursor;
  
  dbms_output.put_line('部门 30 的员工数量: ' || v_total_count);
  dbms_output.put_line('部门 30 的工资总和: ' || v_total_sal);
 end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值