存儲過程格式

DELIMITER ||| /*定義結束符*/測試

DROP PROCEDURE IF EXISTS `test` ||| /*刪除存儲過程若是存在*/事務

CREATE PROCEDURE `test`(
IN Id INT UNSIGNED,  -- 傳入參數test

OUT ReturnValue VARCHAR(32), -- 傳出參數,定義爲錯誤碼
OUT ReturnMessage VARCHAR(1024) -- 傳出參數,定義爲運行流程變量

)異常

MODIFIES SQL DATA
SQL SECURITY INVOKER
COMMENT '測試'
Main : BEGIN /*主體內容開始*/
/*定義狀態*/
DECLARE SYSError INT DEFAULT 0;
DECLARE SYSEmpty INT DEFAULT 0;
異常處理

/*局部變量*/
DECLARE V1  VARCHAR(128) DEFAULT '';
DECLARE V2  INT UNSIGNED DEFAULT 0;
DECLARE V3  TINYINT UNSIGNED DEFAULT 0;
DECLARE V4 NUMERIC(16,4) DEFAULT 0.0;
/* 聲明異常處理(定義系統錯誤),必須放在變量定義以後*/存儲過程

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET SYSError = 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET SYSEmpty = 1;

/* 初始化變量*/錯誤

-- 存儲過程當中的變量賦值爲 SET
SET ReturnValue = '';
SET ReturnMessage = '測試開始;參數

 

-- 開啓事務系統

START TRANSACTION;

  SELECT price INTO V1 WHERE `id` = Id;

  IF SYSEmpty = 1 THEN 

    SET ReturnValue = 'E_SELECT';

    SET ReturnMessage = CONCAT(ReturnMessage ,'->','沒找到');

    LEAVE Main;

    ROLLBACK;

  END IF;

COMMIT;

SET ReturnValue = 'OK';
SET ReturnMessage = CONCAT(ReturnMessage,'->','完畢');
END |||
DELIMITER ;

 存儲過程調用 : 

CALL  test(ID,@V,@M);

SELECT @V,@M;

CALL 是存儲過程的調用,在調用時,須要把全部的參數都寫進去,輸入和輸出。輸出參數前 + @ 符號。

下面的 SELECT 語句是拿到輸出參數。

相關文章
相關標籤/搜索