头歌 实验七 存储过程

实验七 存储过程头歌

制作不易!点个关注,希望给大家带来价值

第1关 增加供应商相关列sqty

use demo;

#代码开始
#在S表中增加一列供应零件总数量(sqty),默认值为0。

alter table s add sqty int default 0;


#代码结束

desc s;

第2关 定义、调用简单存储过程

use demo;

#代码开始
#1、定义简单存储过程:计算所有供应商供应零件总数量并修改供应商相关列sqty。
drop procedure if exists proc_1;
delimiter //
create procedure proc_1()
begin
    update s set sqty=(select sum(qty) from spj where spj.sno=s.sno);
end//


#2、调用存储过程。
call proc_1();


#代码结束

select * from s;

第3关 定义、调用带参数存储过程(1)

use demo;

#代码开始
DELIMITER //
create PROCEDURE proc_2(in in_sno char(2),out out_qty int)
begin
	SELECT sum(qty) into out_qty from spj where sno=in_sno;
end//



#2、调用带参数存储过程。
#以供应商S1为参数,调用存储过程,将结果存入@sqty1
call proc_2('S1',@sqty1);

#以供应商S2为参数,调用存储过程,将结果存入@sqty2
call proc_2('S2',@sqty2);
#代码结束

select @sqty1,@sqty2

第4关 定义、调用带参数存储过程(2)

use demo;
 
#代码开始
#1、定义带参数存储过程:插入一个指定供应商信息 ('S6','泰欣',40,'十堰')(所有信息由参数提供)。
 
DELIMITER //
CREATE PROCEDURE proc_insert (
    p_sno CHAR ( 2 ),
    p_sname VARCHAR ( 10 ),
    p_status INT,
    p_city VARCHAR ( 10 )) BEGIN
    DECLARE
        v_count INT;
    SELECT
        COUNT(*) INTO v_count 
    FROM
        s 
    WHERE
        sno = p_sno;
    IF
        v_count > 0 THEN
        SELECT
            ( '供应商已存在,请重新插入!' );
        
        ELSEIF v_count = 0 THEN
        INSERT INTO s ( sno, sname, STATUS, city )
        VALUES
            ( p_sno, p_sname, p_status, p_city );
    END IF;
    
END//
 
#2、调用带参数存储过程。
CALL proc_insert ('S6','泰欣',40,'十堰');
SELECT
    * 
FROM
    s WHERE sno = 'S6';
#代码结束

第5关 定义、调用带参数存储过程(3)

use demo;

#代码开始
#1、定义带参数存储过程:删除指定零件代码的供应信息,并返回删除的元组数。
drop procedure if exists delete_info;
delimiter //
create procedure delete_info(in p_pon char(7),out d_num int)
begin
delete from spj where pno =p_pon;
select row_count() into d_num;
end //


#2、调用带参数存储过程。
#以零件代码P5为参数,调用存储过程,将结果存入@p_count1
call delete_info('P5',@p_count1);

#以零件代码P6为参数,调用存储过程,将结果存入@p_count2
call delete_info('P6',@p_count2);

#代码结束

select @p_count1,@p_count2

第6关 定义、调用带参数存储过程(4)

use demo;
 
#代码开始
#1、定义带参数存储过程:修改指定代码项目的其它信息(所有信息由参数提供)。
DELIMITER //
CREATE PROCEDURE proc_update (
    p_jno CHAR ( 2 ),
    p_jname VARCHAR ( 10 ),
    p_city VARCHAR ( 10 )) BEGIN
    DECLARE
        p_count INT;
    SELECT
        COUNT(*) INTO p_count 
    FROM
        j 
    WHERE
        jno = p_jno;
    IF
        p_count > 0 THEN
            UPDATE j 
            SET jname = p_jname,
            city = p_city 
        WHERE
            j.jno = p_jno;
        
    END IF;
    
END//
 
 
#2、调用带参数存储过程。
# 修改工程项目代码 J7(jno) 的信息为: 汽车制造厂 (jname)  十堰 (city)
CALL proc_update ( 'J7', '汽车制造厂', '十堰' );
 
#代码结束
 
select * from j where jno = 'J7';
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是头歌数据库实验九的另一个存储过程示例: 1. 创建存储过程 ```mysql CREATE PROCEDURE `get_singer_song`(IN singer_name VARCHAR(50), OUT song_list TEXT) BEGIN DECLARE song_names TEXT DEFAULT ''; DECLARE song_cursor CURSOR FOR SELECT name FROM song WHERE singer = singer_name; DECLARE CONTINUE HANDLER FOR NOT FOUND SET @finished = 1; OPEN song_cursor; song_loop: LOOP FETCH song_cursor INTO song_names; IF @finished THEN LEAVE song_loop; END IF; SET song_list = CONCAT(song_list, song_names, ','); END LOOP; CLOSE song_cursor; END ``` 该存储过程接收一个歌手名字参数,返回该歌手演唱的所有歌曲名称,以逗号分隔。 2. 调用存储过程 ```mysql CALL get_singer_song('周杰伦', @song_list); SELECT @song_list; ``` 执行上述语句即可调用存储过程,查询周杰伦演唱的所有歌曲名称。 3. 修改存储过程 ```mysql ALTER PROCEDURE `get_singer_song`(IN singer_name VARCHAR(50), OUT song_list TEXT) BEGIN DECLARE song_names TEXT DEFAULT ''; DECLARE song_cursor CURSOR FOR SELECT name FROM song WHERE singer = singer_name; DECLARE CONTINUE HANDLER FOR NOT FOUND SET @finished = 1; OPEN song_cursor; song_loop: LOOP FETCH song_cursor INTO song_names; IF @finished THEN LEAVE song_loop; END IF; IF song_names REGEXP '^[a-zA-Z]+$' THEN SET song_list = CONCAT(song_list, song_names, ','); END IF; END LOOP; CLOSE song_cursor; END ``` 修改存储过程的查询语句,仅返回歌曲名称中含有英文字母的歌曲。 4. 删除存储过程 ```mysql DROP PROCEDURE `get_singer_song`; ``` 执行上述语句即可删除存储过程。 ### 回答2: 头歌数据库实验九是关于存储过程的。存储过程是一种在数据库中预定义的可被多次调用的程序,它可以接收参数、执行一系列的SQL语句,并返回结果。存储过程数据库中的使用具有以下优点: 1. 提高数据库的性能:存储过程可以将一系列的SQL语句封装在一个单独的过程中,减少了网络传输的开销。当需要多次执行相同的逻辑时,只需要调用存储过程,而不需要每次都重新发送相同的SQL语句,降低了数据库服务器的负载。 2. 简化开发工作:将复杂的代码逻辑封装在存储过程中,可以简化开发工作。开发人员可以通过调用存储过程来执行一系列的操作,而无需编写大量重复的代码。 3. 提高数据安全性:通过存储过程,可以控制对数据库的访问权限。开发人员可以通过存储过程定义明确的访问规则,限制用户对数据库的操作,从而提高数据的安全性。 4. 提升数据库的一致性:存储过程可以保证数据库中的数据在修改过程中的一致性。在存储过程中,可以定义事务的边界,保证多个SQL语句作为一个操作单元一起执行,要么全部成功,要么全部失败,避免了数据不一致的情况。 5. 提供更好的维护性:当数据库结构发生变化时,只需要修改存储过程的定义,而不需要修改所有调用该存储过程的地方。这使得维护数据库变得更加容易。 总之,存储过程数据库中一种非常实用的功能,可以提高数据库的性能、简化开发工作、提高数据安全性、提升数据库一致性,并提供更好的维护性。 ### 回答3: 头歌数据库实验九中,存储过程是一种预编译的数据库对象,用于执行一系列SQL语句和逻辑操作。它能够将多个SQL语句组合起来形成一个可重复使用的程序模块,提高数据库的性能和可维护性。 存储过程包含了一些SQL语句、控制流语句和变量。可以通过参数将值传递给存储过程,也可以通过返回值获取计算结果。它可以在数据库中创建和存储,并可以被其他程序调用和执行。 存储过程的优点主要有以下几点: 首先,存储过程可以减少网络流量。将一系列的SQL语句封装在存储过程中,可以减少多次请求和响应的开销,从而减少网络的负载。 其次,存储过程可以提高数据库性能。存储过程数据库中被编译和优化,可以复用执行计划,减少重复计算的开销,提高查询速度。 再次,存储过程可以增加数据库的安全性。通过存储过程,可以实现数据库的访问控制和数据权限控制,提供更好的数据保护机制。 此外,存储过程可以提高开发效率和可维护性。存储过程可以将业务逻辑分离到数据库层面,减少了应用程序的复杂性,使代码更易于维护和修改。 总结来说,存储过程是一种强大的数据库功能,通过将一系列的SQL语句组织起来形成可重复使用的程序模块,提高了数据库的性能、安全性和可维护性。同时,它也能够减少网络流量,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值