OpenGauss数据库-H.存储过程

第1关:创建存储过程

任务描述

本关任务:创建一个新的存储过程并调用这个存储过程。

CREATE PROCEDURE proc01()
AS
BEGIN
    -- 检查并删除已存在的tmp表
    IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'tmp') THEN
        DROP TABLE tmp;
    END IF;
    
    -- 创建tmp表
    CREATE TABLE tmp (
        num INTEGER,
        name CHAR(20),
        course CHAR(20)
    );
    
    -- 插入数据并按num和course排序
    INSERT INTO tmp
    SELECT 
        s.num, 
        s.name, 
        c.name
    FROM 
        student s
    JOIN 
        sel_course sc ON s.num = sc.studentid
    JOIN 
        course c ON sc.courseid = c.id
    WHERE 
        s.dept = 'cs'
    ORDER BY 
        s.num, c.name;
END;
/

-- 调用存储过程(不显示查询结果)
CALL proc01();

第2关:修改存储过程

任务描述

本关任务: 删除存储过程proc01,重新创建存储过程proc01;

-- 删除现有存储过程
DROP PROCEDURE IF EXISTS proc01;

-- 重新创建存储过程proc01
CREATE OR REPLACE PROCEDURE proc01()
AS
BEGIN
    -- 1. 删除sel_course表中成绩<60的记录
    DELETE FROM sel_course WHERE score < 60;
    
    -- 2. 检查并删除已存在的tmp表
    IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'tmp') THEN
        DROP TABLE tmp;
    END IF;
    
    -- 3. 创建新的tmp表
    CREATE TABLE tmp (
        num INTEGER,
        name CHAR(20),
        course CHAR(20),
        score INTEGER
    );
    
    -- 4. 插入数据并按num和course排序(确保结果顺序)
    INSERT INTO tmp
    SELECT 
        s.num, 
        s.name, 
        c.name, 
        sc.score
    FROM 
        student s
    JOIN 
        sel_course sc ON s.num = sc.studentid
    JOIN 
        course c ON sc.courseid = c.id
    WHERE 
        s.dept = 'cs'
    ORDER BY 
        s.num, c.name;  -- 按学号升序、课程名升序排列
END;
/

-- 调用存储过程
CALL proc01();

-- 查询tmp表(按相同规则排序)
SELECT * FROM tmp ORDER BY num, course;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JzSt_Han

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值