頭歌資料庫實驗六:儲存過程

Cloudservice發表於2024-05-29

第1關:增加供應商相關列sqty

use demo;
 
#程式碼開始
#在S表中增加一列供應零件總數量(sqty),預設值為0。
ALTER TABLE s ADD sqty INT DEFAULT 0;
 
 
#程式碼結束
 
desc s;

第2關:定義、呼叫簡單儲存過程

use demo;
 
#程式碼開始
#1、定義簡單儲存過程:計算所有供應商供應零件總數量並修改供應商相關列sqty。
 
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;
 
#程式碼開始
#1、定義帶引數儲存過程:查詢返回指定供應商的供應零件總數量。
drop procedure if exists proc_2;
delimiter //
create procedure proc_2(in isno char(2),OUT osqty INT)
begin
    select sum(qty) into osqty from spj where sno=isno;
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_pno char(7),out d_num int)
begin
delete from spj where pno = p_pno;
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';

相關文章