MySQL的SQL語句 - 數據操做語句(1)- CALL 語句

CALL 語句

 



CALL sp_name([parameter[,...]])CALL sp_name[()]
 
CALL 語句調用 CREATE PROCEDURE 定義的存儲過程。   若是存儲過程不帶參數,調用時能夠在不帶括號。也就是說,CALL p() 和CALL p 是等價的。   CALL 可使用聲明爲 OUT 或 INOUT 的參數將值回傳給它的調用者。當過程返回時,客戶端程序還能夠得到例程中執行的最後一條語句所影響的行數在 SQL 級別,調用 ROW_COUNT() 函數;在 C API 中,調用mysql_affected_rows() 函數。   要使用 OUT 或 INOUT 參數從過程當中獲取值,請經過用戶變量傳遞該參數,而後在過程返回後檢查變量的值。(若是從另外一個存儲過程或函數中調用該過程,還能夠將例程參數或本地例程變量做爲 IN 或 INOUT 參數傳遞。)對於 INOUT 參數,請在將其傳遞給過程以前對其值進行初始化。下面的過程有一個 OUT 參數,該過程將其設置爲當前服務器版本,以及一個INOUT 值,該過程將其當前值遞增 1:  


CREATE PROCEDURE p (OUT ver_param VARCHAR(25), INOUT incr_param INT)BEGIN  # Set value of OUT parameter  SELECT VERSION() INTO ver_param;  # Increment value of INOUT parameter  SET incr_param = incr_param + 1;END;
 
在調用過程以前,初始化做爲 INOUT 參數傳遞的變量。調用過程後,兩個變量的值將被設置或修改:  


mysql> SET @increment = 10;mysql> CALL p(@version, @increment);mysql> SELECT @version, @increment;+--------------------+------------+| @version           | @increment |+--------------------+------------+| 8.0.3-rc-debug-log |         11 |+--------------------+------------+
 
在用於 PREPARE 和 EXECUTE 的預編譯 CALL 語句中,佔位符能夠用於 IN參數、OUT 和 INOUT 參數。這些類型的參數可使用以下:  


mysql> SET @increment = 10;mysql> PREPARE s FROM 'CALL p(?, ?)';mysql> EXECUTE s USING @version, @increment;mysql> SELECT @version, @increment;+--------------------+------------+| @version           | @increment |+--------------------+------------+| 8.0.3-rc-debug-log |         11 |+--------------------+------------+
 
要編寫使用 CALL SQL 語句執行產生結果集的存儲過程的 程序,必須啓用 CLIENT_MULTI_RESULTS 標誌。這是由於除了過程當中執行的語句可能返回的結果集以外,每一個 CALL 還返回一個結果來指示調用狀態。若是使用CALL 執行任何包含預編譯語句的存儲過程,也必須啓用CLIENT_MULTI_RESULTS。在加載過程當中不能肯定這些語句是否會產生結果集,所以有必要假定它們會產生結果集。   能夠在調用 mysql_real_connect() 時顯式地傳遞CLIENT_MULTI_RESULTS 標誌自己,或者隱式傳遞CLIENT_MULTI_STATEMENTS 來啓用 CLIENT_MULTI_RESULTS。默認狀況下 CLIENT_MULTI_RESULTS 是啓用的。   要處理使用 mysql_query() 或 mysql_real_query() 執行的 CALL 語句的結果,可使用一個調用 mysql_next_result() 的循環來肯定是否有更多的結果。   C 程序可使用預編譯語句接口來執行 CALL 語句並訪問 OUT 和 INOUT參數。這是經過使用循環處理 CALL 語句的結果來完成的,該循環調用mysql_stmt_next_result() 來肯定是否有更多的結果。提供 MySQL 接口的語言可使用預編譯的 CALL 語句直接檢索 OUT 和 INOUT 過程參數。   存儲程序引用的對象的元數據更改將被檢測到,並在下次執行程序時自動從新解析受影響的語句。
相關文章
相關標籤/搜索