Procedure 語法:
CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name type type: Any valid MySQL data type characteristic: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } begin Valid SQL routine statement end;
Function 語法:
CREATE [DEFINER = { user | CURRENT_USER }] FUNCTION sp_name ([func_parameter[,...]]) RETURNS type [characteristic ...] routine_body func_parameter: param_name type type: Any valid MySQL data type characteristic: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } begin Valid SQL routine statement end;
官網關於 procedure, function相關文檔:
FAQ:http://dev.mysql.com/doc/refman/5.6/en/faqs-stored-procs.html
語法說明:http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html
Cursor官方文檔:http://dev.mysql.com/doc/refman/5.6/en/cursors.html
在遍歷時,mysql中的3種循環方式(loop, while, repeat)都可以使用。官方文檔中給了 loop 方式的deamo。
在使用cursor時要注意:
1)declare cursor之前不能有任何的除了declare以外的操作,也就是之前只能有變量聲明。
2)declar cursor 之後不能有任何變量的聲明,可以聲明異常處理 handler。
3)cursor 只能在procedure, function中。
4)fetch into var1, var2。這裡的var名不能與 declare cursor時select 中的列名一樣。如果一樣會fetch 到NULL。例如下面deamon中的 metric ==> m 。
其它的deamon:http://www.mysqltutorial.org/mysql-cursor/
在什麼樣的條件下,做什麼樣的處理。例如當發生異常時,該怎麼做。
相關文檔:http://dev.mysql.com/doc/refman/5.6/en/declare-handler.html
在下面的deamon中就有declare continue handler NOT FOUND 、declare continue handler SQLSTATE 等。
http://mydebugger.com/quick_start.php
上面 的兩個procedure,在使用debugger調試時,只需要在main中寫直接調用 就可以了。