1. 程式人生 > >動態查詢語句---存儲過程中的異常處理

動態查詢語句---存儲過程中的異常處理

post 處理 into cti 可見 復雜 一個 color exec

動態查詢語句

語法

PREPARE stmt_name FROM preparable_stmt; ----創建
EXECUTE stmt_name [USING @var_name [, @var_name] ...];---傳遞參數
{DEALLOCATE | DROP} PREPARE stmt_name;--釋放

例子

SET @skip;SET @number=5;
PREPARE LIMIT  FROM "SELECT * FROM tb1 LIMIT ?,?";
EXECUTE STMT SUING  @skip,@number;

註意點

1.如果新的 PREPARE 語句使用了一個已存在的 stmt_name ,那麽原有的將被立即釋放!

即使這個新的 PREPARE 語句因為錯誤而不能被正確執行。

2. 即使 preparable_stmt 語句中的 ? 所代表的是一個字符串,你也不需要將 ? 用引號包含起來

3. stmt_name 是不區分大小寫的

4. 如果在終止客戶端連接會話時,沒有顯式地調用 DEALLOCATE PREPARE 句法釋放資源,服務器端會自己動釋放它。

5. PREPARE stmt_name 的作用域是當前客戶端連接會話可見

存儲過程中的異常處理

declare action handler for condition_value statement;

action 可以是以下兩種:

CONTINUE:繼續執行當前代碼塊

EXIT:退出當前代碼塊

condition_value 是一類特定的條件,可以使一下幾種:

一個MYSQL錯誤代碼

一個標準的SQLSTATE值,如SQLWARNING,NOTFOUND ,SQLEXCEPTION等

statement

是一個語句塊,從BEGIN開始,到END結束。它可以是一個簡單的sql語句,也可以是很復雜的邏輯語句。

例子

DECLARE EXIT HANDLER FOR SQLEXCEPION
BEGIN
ROLLBACK;
SELECT 發生錯誤,執行回滾,程序將終止執行;
END;

對於遊標的或者select into 操作,出現找不到的情況

DECLARE CONTINUE HANDLER FOR NOT FOUND SET found_row = 1;

動態查詢語句---存儲過程中的異常處理