首頁 > 軟體

MySQL儲存過程引數的用法及說明

2022-08-17 18:03:27

MySQL儲存過程的引數

MySQL儲存過程的引數共有三種:

  • IN
  • OUT 
  • INOUT

輸入引數

  • 輸入引數(IN):在呼叫儲存過程中傳遞資料給儲存過程的引數(在呼叫的儲存過程必須具有實際值的變數 或者 字面值)

細節注意:下面的儲存過程建立會報錯,他的型別以及型別長度需要和建立表欄位的型別和型別長度一致

-- 建立一個儲存過程:新增一個員工資訊
DELIMITER $$
CREATE PROCEDURE procedure_test4(IN `p_name` VARCHAR,IN `p_call` VARCHAR)
BEGIN
  INSERT INTO employees(`name`,`call`)
  VALUES(`p_name`,`p_call`);
END $$

正確寫法

-- 建立一個儲存過程:新增一個員工資訊
DELIMITER $$
CREATE PROCEDURE procedure_test4(IN `p_name` VARCHAR(64),IN `p_call` VARCHAR(64))
BEGIN
  INSERT INTO employees(`name`,`call`)
  VALUES(`p_name`,`p_call`);
END $$

現在來測試一下是否可以呼叫儲存過程並且新增資料進去

先看一下表原來的資料

呼叫一下儲存過程

CALL procedure_test4('李四','321321')

再來看一下結果

輸出引數

  • 輸出引數(OUT):將儲存過程中產生的資料返回給呼叫者,相當於Java方法的返回值,但不同的是一個儲存過程可以有多個輸出引數

例子:

-- 建立一個儲存過程:根據id查詢出該員工姓名
DELIMITER $$
CREATE PROCEDURE procedure_test5(IN `p_id` INT(64),OUT `p_name` VARCHAR(64))
BEGIN
  SELECT `name` INTO `p_name` FROM employees WHERE id=`p_id`;
END $$

建立沒問題,接下來呼叫測試一下

SET @e_name=''
CALL procedure_test5('2',@e_name)
SELECT @e_name FROM DUAL 

輸入輸出引數(INOUT)

-- INOUT(輸入輸出引數)
DELIMITER $$
CREATE PROCEDURE procedure_test6(INOUT str VARCHAR(64))
BEGIN
  -- 把你傳進來的值作為條件,查詢出的結果再重新賦值給 str 返回出去
  -- 這裡的 str 既當輸入引數,也當輸出引數
  SELECT `name` INTO str FROM employees WHERE id=str;
END $$

建立沒問題,接下來測試一下

SET @e_name='2'
CALL procedure_test6(@e_name)
SELECT @e_name FROM DUAL 

也是沒問題的,但在實際開發中 INOUT 建議少用,原因:程式碼的可讀性會變差

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com