首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 預存程序參數 IN、OUT、INOUT 差異與實戰範例

     編輯:MySQL 資料庫相關知識

三種參數模式對照

模式方向初始值可見性類比
IN呼叫者 → 程序呼叫者提供程式內修改不影響外部C 語言值傳遞
OUT程序 → 呼叫者NULL(忽略呼叫者輸入)程式內賦值回傳C 語言指標/引用傳回
INOUT雙向呼叫者提供程式可修改並回傳C 語言引用傳遞

程式碼範例與執行結果

IN 參數

CREATE PROCEDURE pr_param_in(IN id INT)
BEGIN
    IF id IS NOT NULL THEN SET id = id + 1; END IF;
    SELECT id AS id_inner;
END;

SET @id = 10;
CALL pr_param_in(@id);
SELECT @id AS id_out;
-- id_inner = 11, id_out = 10(外部不變)

OUT 參數

CREATE PROCEDURE pr_param_out(OUT id INT)
BEGIN
    SELECT id AS id_inner_1; -- NULL
    IF id IS NOT NULL THEN SET id = id + 1; SELECT id AS id_inner_2;
    ELSE SELECT 1 INTO id; END IF;
    SELECT id AS id_inner_3;
END;

SET @id = 10;
CALL pr_param_out(@id);
SELECT @id AS id_out;
-- id_inner_1 = NULL, id_inner_3 = 1, id_out = 1

INOUT 參數

CREATE PROCEDURE pr_param_inout(INOUT id INT)
BEGIN
    SELECT id AS id_inner_1; -- 10
    IF id IS NOT NULL THEN SET id = id + 1; SELECT id AS id_inner_2;
    ELSE SELECT 1 INTO id; END IF;
    SELECT id AS id_inner_3;
END;

SET @id = 10;
CALL pr_param_inout(@id);
SELECT @id AS id_out;
-- id_inner_1=10, id_inner_2=11, id_inner_3=11, id_out=11

選擇建議

  • 僅需傳入資料 → IN
  • 僅需回傳結果 → OUT
  • 需傳入、運算、回傳 → INOUT
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved