三種參數模式對照
| 模式 | 方向 | 初始值 | 可見性 | 類比 |
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