相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  儲存常式語法

27.2.1 儲存常式語法

儲存常式是程序或函式。儲存常式是使用 CREATE PROCEDURECREATE FUNCTION 陳述式建立的(請參閱第 15.1.17 節「CREATE PROCEDURE 和 CREATE FUNCTION 陳述式」)。程序是使用 CALL 陳述式叫用的(請參閱第 15.2.1 節「CALL 陳述式」),並且只能使用輸出變數傳回值。函式可以像任何其他函式一樣從陳述式內部呼叫(也就是說,透過叫用函式的名稱),並且可以傳回純量值。儲存常式的本文可以使用複合陳述式(請參閱第 15.6 節「複合陳述式語法」)。

可以使用 DROP PROCEDUREDROP FUNCTION 陳述式捨棄儲存常式(請參閱第 15.1.29 節「DROP PROCEDURE 和 DROP FUNCTION 陳述式」),並使用 ALTER PROCEDUREALTER FUNCTION 陳述式修改(請參閱第 15.1.7 節「ALTER PROCEDURE 陳述式」)。

儲存程序或函式與特定的資料庫相關聯。這有幾個含義

  • 叫用常式時,會執行隱含的 USE db_name(並在常式終止時復原)。不允許在儲存常式中使用 USE 陳述式。

  • 您可以使用資料庫名稱限定常式名稱。這可用於參考不在目前資料庫中的常式。例如,若要叫用與 test 資料庫相關聯的儲存程序 p 或函式 f,您可以說 CALL test.p()test.f()

  • 捨棄資料庫時,也會捨棄與其相關聯的所有儲存常式。

儲存函式不能是遞迴的。

儲存程序中的遞迴是允許的,但預設會停用。若要啟用遞迴,請將 max_sp_recursion_depth 伺服器系統變數設定為大於零的值。儲存程序遞迴會增加執行緒堆疊空間的需求。如果您增加 max_sp_recursion_depth 的值,可能需要在伺服器啟動時增加 thread_stack 的值,藉此增加執行緒堆疊大小。如需詳細資訊,請參閱第 7.1.8 節「伺服器系統變數」

MySQL 支援一個非常有用的延伸功能,可讓您在儲存程序內部使用一般的 SELECT 陳述式(也就是說,不使用游標或區域變數)。此類查詢的結果集會直接傳送到用戶端。多個 SELECT 陳述式會產生多個結果集,因此用戶端必須使用支援多個結果集的 MySQL 用戶端程式庫。這表示用戶端必須使用至少與 4.1 版一樣新的 MySQL 版本中的用戶端程式庫。用戶端也應該在連線時指定 CLIENT_MULTI_RESULTS 選項。對於 C 程式,可以使用 mysql_real_connect() C API 函式完成。請參閱 mysql_real_connect()多個陳述式執行支援

儲存程序中的陳述式所參考的使用者變數,其類型是在第一次叫用程序時決定的,並且在之後每次叫用程序時都保留此類型。