一、实验目的及要求
1、熟悉使用PL/SQL语句定义选择、循环结构的方法;
2、熟悉使用PL/SQL语句定义游标的方法;
3、熟悉使用PL/SQL语句定义函数的方法;
4、完成实验报告。
- 主要仪器设备
Win 10操作系统;ORACLE数据库管理系统
三、实验内容、步骤及结果
用scott用户登录oracle数据库实现下列操作
1、
编写PL/SQL程序,用循环语句求5!并输出结果。
PL/SQL程序:
SET SERVEROUTPUT ON;
DECLARE
factorial NUMBER := 1;
i NUMBER := 1;
BEGIN
WHILE i <= 5 LOOP
factorial := factorial * i;
i := i + 1;
END LOOP;
DBMS_OUTPUT.PUT_LINE('5! 的值为:'|| factorial);
END;
2、
编写PL/SQL程序,根据emp表中JOB列值,为姓名(ENAME列)值为SMITH的雇员修改工资。若SMITH的JOB列值为’CLERK’,则其SAL列值加1000;若JOB列值为’SALESMAN’,则其SAL列值加500;其他情况,SAL列值加100。然后将SMITH修改后的工资值查询出并通过输出函数显示到屏幕。
PL/SQL程序:
SET SERVEROUTPUT ON;
DECLARE
job_value VARCHAR2(50);
new_salary NUMBER;
BEGIN
-- 获取SMITH的JOB值
SELECT JOB INTO job_value FROM emp WHERE ENAME = 'SMITH';
-- 根据JOB值修改工资
IF job_value = 'CLERK' THEN
UPDATE emp
SET SAL = SAL + 1000
WHERE ENAME = 'SMITH';
SELECT SAL INTO new_salary FROM emp WHERE ENAME = 'SMITH';
ELSIF job_value = 'SALESMAN' THEN
UPDATE emp
SET SAL = SAL + 500
WHERE ENAME = 'SMITH';
SELECT SAL INTO new_salary FROM emp WHERE ENAME = 'SMITH';
ELSE
UPDATE emp
SET SAL = SAL + 100
WHERE ENAME = 'SMITH';
SELECT SAL INTO new_salary FROM emp WHERE ENAME = 'SMITH';
END IF;
-- 输出修改后的工资
DBMS_OUTPUT.PUT_LINE('SMITH修改后的工资为: ' || new_salary);
END;
执行结果截图:
【此处放上你的运行结果的截图】
3、
(1)首先创建三个表sallow(empno,sal)、salmid(empno,sal)、salhigh(empno,sal),其中,empno的类型为number(10),sal的类型为number(10,2)。
(2)编写程序使用游标遍历emp表,若工资值(sal列)大于1500并且小于2000,则将emp表中的员工号(empno)和工资值取出存入表sallow(empno,sal)中,若工资值大于等于2000且小于3500则将该信息存入salmid(empno,sal)表中,若工资值大于等于3500则存入表salhigh(empno,sal)中。
PL/SQL程序:
-- 创建表
CREATE TABLE sallow(
empno NUMBER(10),
sal NUMBER(10,2)
);
CREATE TABLE salmid(
empno NUMBER(10),
sal NUMBER(10,2)
);
CREATE TABLE salhigh(
empno NUMBER(10),
sal NUMBER(10,2)
);
-- 遍历emp表并插入数据
DECLARE
CURSOR emp_cursor IS SELECT empno, sal FROM emp;
empno_value NUMBER(10);
sal_value NUMBER(10,2);
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO empno_value, sal_value;
EXIT WHEN emp_cursor%NOTFOUND;
IF sal_value > 1500 AND sal_value < 2000 THEN
INSERT INTO sallow(empno, sal) VALUES (empno_value, sal_value);
ELSIF sal_value >= 2000 AND sal_value < 3500 THEN
INSERT INTO salmid(empno, sal) VALUES (empno_value, sal_value);
ELSIF sal_value >= 3500 THEN
INSERT INTO salhigh(empno, sal) VALUES (empno_value, sal_value);
END IF;
END LOOP;
CLOSE emp_cursor;
END;
4、
创建一个通过部门名称(DNAME列)返回该部门员工最高工资(SAL列)的存储函数GET_DEPT_SAL(dept_name VARCHAR2)。dept_name参数接收部门名称,返回值为该部门员工的最高工资。然后在程序块中调用该函数,统计部门名称为RESEARCH的员工最高工资并输出结果。
PL/SQL程序:
-- 创建存储函数
CREATE OR REPLACE FUNCTION GET_DEPT_SAL(dept_name VARCHAR2)
RETURN NUMBER IS
max_sal NUMBER;
BEGIN
SELECT MAX(SAL) INTO max_sal
FROM emp e
JOIN dept d ON e.deptno = d.deptno
WHERE d.DNAME = dept_name;
RETURN max_sal;
END;
-- 调用存储函数并输出结果
DECLARE
research_max_sal NUMBER;
BEGIN
research_max_sal := GET_DEPT_SAL('RESEARCH');
DBMS_OUTPUT.PUT_LINE('部门RESEARCH的员工最高工资为:'|| research_max_sal);
END;
执行结果截图:
【此处放上你的运行结果截图】