首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 存儲過程入門:IN/OUT/INOUT 參數模式完整示例

     編輯:MySQL 綜合教學

MySQL 存儲過程參數模式詳解:IN、OUT、INOUT 實戰

存儲過程將 SQL 邏輯封裝在服務端,減少網絡交互、防注入、提升性能。本文通過 person 表演示四種參數模式的創建與調用。

表結構

CREATE TABLE person (
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(255),
  age INT,
  password VARCHAR(255)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1. 僅 IN 參數(輸入,默認)

CREATE PROCEDURE proc_find_by_id(IN n INT)
BEGIN
    SELECT * FROM person WHERE id = n;
END;

SET @n = 2;
CALL proc_find_by_id(@n);

調用時必須傳值,過程內修改不返回。

2. 僅 OUT 參數(輸出)

CREATE PROCEDURE proc_get_count(OUT n INT)
BEGIN
    SELECT COUNT(*) INTO n FROM person;
END;

CALL proc_get_count(@n);
SELECT @n AS total;

過程內賦值,調用後通過會話變量獲取結果。

3. IN + OUT 參數

CREATE PROCEDURE proc_find_info(
    IN n INT,
    OUT p_username VARCHAR(255),
    OUT p_age INT
)
BEGIN
    SELECT username, age INTO p_username, p_age FROM person WHERE id = n;
END;

SET @id = 2;
CALL proc_find_info(@id, @username, @age);
SELECT @username, @age;

4. INOUT 參數(輸入並輸出)

CREATE PROCEDURE proc_get_age(INOUT n INT)
BEGIN
    SELECT age INTO n FROM person WHERE id = n;
END;

SET @id = 1;
CALL proc_get_age(@id);
SELECT @id;  -- 返回 age 值

同一變量既傳入查詢條件,又承接結果。

參數模式總結

模式關鍵字調用時過程內修改返回調用者
輸入IN必傳允許不返回
輸出OUT必傳變量必須賦值返回
輸入輸出INOUT必傳變量可讀可寫返回

調用語法提醒

  • 會話變量 @var 用於傳入/接收 OUT/INOUT 值。
  • CALL proc(@in_var, @out_var, @inout_var);
  • 調用後 SELECT @out_var, @inout_var; 查看結果。

進階:查看元數據

SHOW CREATE PROCEDURE proc_find_by_id;
SHOW PROCEDURE STATUS WHERE Db = 'test';

總結

掌握 IN/OUT/INOUT 三種模式,即可覆蓋 90% 存儲過程參數交互場景。實際開發中:查詢類用 IN+OUT,統計類用 OUT,原地轉換用 INOUT,配合應用層調用實現業務邏輯下沉。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved