实验报告:Oracle数据库原理及应用,2,PL/SQL定义游标、函数

一、实验目的及要求

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;

执行结果截图:

【此处放上你的运行结果截图】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值