1. 程式人生 > 其它 >前端週刊:2022-9 期

前端週刊:2022-9 期

1.儲存過程的語法(轉自:http://c.biancheng.net/view/2593.html)

可以使用 CREATE PROCEDURE 語句建立儲存過程,語法格式如下:

CREATE PROCEDURE <過程名> ( [過程引數[,…] ] ) <過程體>
[過程引數[,…] ] 格式
[ IN | OUT | INOUT ] <引數名> <型別>

語法說明如下:

1) 過程名

儲存過程的名稱,預設在當前資料庫中建立。若需要在特定資料庫中建立儲存過程,則要在名稱前面加上資料庫的名稱,即 db_name.sp_name。
需要注意的是,名稱應當儘量避免選取與 MySQL 內建函式相同的名稱,否則會發生錯誤。

2) 過程引數

儲存過程的引數列表。其中,<引數名>為引數名,<型別>為引數的型別(可以是任何有效的 MySQL 資料型別)。當有多個引數時,引數列表中彼此間用逗號分隔。儲存過程可以沒有引數(此時儲存過程的名稱後仍需加上一對括號),也可以有 1 個或多個引數。
MySQL 儲存過程支援三種類型的引數,即輸入引數、輸出引數和輸入/輸出引數,分別用 IN、OUT 和 INOUT 三個關鍵字標識。其中,輸入引數可以傳遞給一個儲存過程,輸出引數用於儲存過程需要返回一個操作結果的情形,而輸入/輸出引數既可以充當輸入引數也可以充當輸出引數。
需要注意的是,引數的取名不要與資料表的列名相同,否則儘管不會返回出錯資訊,但是儲存過程的 SQL 語句會將引數名看作列名,從而引發不可預知的結果。

3) 過程體

儲存過程的主體部分,也稱為儲存過程體,包含在過程呼叫的時候必須執行的 SQL 語句。這個部分以關鍵字 BEGIN 開始,以關鍵字 END 結束。若儲存過程體中只有一條 SQL 語句,則可以省略 BEGIN-END 標誌。
在儲存過程的建立中,經常會用到一個十分重要的 MySQL 命令,即 DELIMITER 命令,特別是對於通過命令列的方式來操作 MySQL 資料庫的使用者,更是要學會使用該命令。
在 MySQL 中,伺服器處理 SQL 語句預設是以分號作為語句結束標誌的。然而,在建立儲存過程時,儲存過程體可能包含有多條 SQL 語句,這些 SQL 語句如果仍以分號作為語句結束符,那麼 MySQL 伺服器在處理時會以遇到的第一條 SQL 語句結尾處的分號作為整個程式的結束符,而不再去處理儲存過程體中後面的 SQL 語句,這樣顯然不行。
為解決以上問題,通常使用 DELIMITER

 命令將結束命令修改為其他字元。語法格式如下:

DELIMITER $$

語法說明如下:

    • $$ 是使用者定義的結束符,通常這個符號可以是一些特殊的符號,如兩個“?”或兩個“¥”等。
    • 當使用 DELIMITER 命令時,應該避免使用反斜槓“\”字元,因為它是 MySQL 的轉義字元。

注意:DELIMITER 和分號“;”之間一定要有一個空格。在建立儲存過程時,必須具有 CREATE ROUTINE 許可權。

例1:建立一個名為ShowStu的儲存過程,查詢student表的內容。

delimiter // 
create PROCEDURE ShowStu()
begin
select * from student;
end//
delimiter ;

例2:建立一個名為GetScoreByStu的儲存過程,用於查詢指定姓名的學生資訊。

delimiter // 
create PROCEDURE GetScoreByStu(in name varchar(50))
begin
select * from student where stuName=name;
end//
delimiter ;

 呼叫儲存過程:call sp_name[(傳參)];

call GetScoreByStu('李四');