建立帶有IN型別引數的儲存過程(四十八)

2022-02-17 12:25:38 字數 2184 閱讀 8071

建立帶有in型別引數的儲存過程

我們經常要從資料表中刪除記錄,一般情況我們刪除記錄都是根據id來刪除的,比如我們通常要輸入delete from 表名 where 後面跟上我們的條件,因為我們要經常寫這個語句,那麼我們就可以將這個語句封裝成乙個儲存過程,比如我們以users表為例,我們先來看一下user表的結構,我們輸入 desc user;

我們再來檢視一下表中的記錄,我們輸入select * from user;

假設我們現在要以id來刪除記錄。id每次都不固定,那麼就需要我們在每次呼叫這個過程的時候去傳遞,所以我們現在需要帶有in型別的引數。

我們學習自定義函式的時候說過,所以這裡我們也要修改一下mysql的定界符,我們輸入delimiter // 把定界符改為//

下面我們來建立乙個儲存過程,我們輸入create procedure removeuserbyid(in id int unsigned)

begin

delete from user where id=id; 第乙個id是字段id,第二個id是我們要傳入的引數,

ok,命令執行成功,下面我們再把定界符改過來,我們輸入delimiter ;

ok,這個儲存過程我們就建立成功了,下面我們來呼叫一下這個儲存過程,因為我們定義的是有參的儲存過程,所以我們就輸入call removeuserbyid(4);

ok,命令執行成功,現在我們來檢視一下這條記錄有沒有被刪除掉,我們輸入 select * from user;

我們發現表中的記錄都被刪除掉了,這是為什麼呢?

因為我們的引數名和欄位名是一樣的,我們知道第乙個和第二個id分別表示什麼意思,但是系統不知道呀,他會認為是兩個字段,所以說我們在寫引數名的時候,不能讓引數名和欄位名一樣。這一點大家一定要記著,下面我們來修改一下這個儲存過程,我們先來看一下修改儲存過程的命令。

alter procedure sp_name [characteristic ...]

comment 'string'

| | sql security

實際上他只能修改這幾個簡單的選項,比如注釋、內容的型別等等,並不能修改過程體,如果是修改過程體的話,只能先將儲存過程刪除,然後再進行重建,刪除儲存過程的方法很簡單,就是drop procedure [if exists] sp_name,所以我們現在只能先刪除儲存過程,我們輸入drop procedure removeuserbyid;

好,命令執行成功,剛才的那個儲存過程就已經被刪除掉了,現在我們先把資料表中的記錄重構一下,然後再把儲存過程重新建立一下,我們先來插入幾條資料。

接下來我們就重新來構建一下儲存過程,並修改一下定界符。我們輸入delimiter //

ok,我們輸入create procedure removeuserbyid(in p_id int unsigned)

begin

delete from user where id=p_id; id是字段id, p_id是我們要傳入的引數,

ok,這個儲存過程我們就建立成功了,下面我們先來檢視一下資料表的記錄,我們輸入select * from user;

ok,接下來我們呼叫一下這個剛建立的儲存過程,我們輸入call removeuserbyid( 13);

ok,命令執行成功,下面我們看一下id=13的記錄是否被刪除掉。我們輸入select * from user where id=13;

我們發現這條記錄並不存在,也就說明這條記錄已經被我們刪除了,ok,這就是我們演示的第乙個帶有in型別的引數。

帶有引數的儲存過程

建立有引數的存數過程,對比函式的定義而言,as就相當於 和函式一樣,引數都定義在主體的前面 例如函式 private static void sum double num1,double num2 在呼叫的時候在 static void main string srgs 寫就可以啦。儲存過程 cre...

帶有輸入引數的儲存過程

建立帶有輸入引數的儲存過程 drop procedure if exists proc user in delimiter create procedure proc user in in in param int begin select from user where userid in par...

帶有輸出引數的儲存過程

建立帶有輸出引數的儲存過程 drop procedure if exists proc user out delimiter create procedure proc user out out out param varchar 20 begin select username into out ...