Stored routines元件中可以包含许多要执行的SQL叙述,在后续的讨论中,它也可以包含宣告与设定变数,和控制执行流程的指令。所以Stored routines元件其实就有一点类似开发应用程式用的程式语言,不过它不会像程式语言那么复杂,而且大部份都是跟资料库相关的SQL叙述。
建立需要的Stored routines元件要使用「CREATE PROCEDURE」或「CREATE FUNCTION」叙述,虽然它们跟其它的SQL叙述一样,也是请资料库执行一件工作,不过Stored routines通常会包含许多需要的叙述,所以通常会使用「SQL script」来执行建立Stored routines的工作。
SQL script是一个包含许多SQL叙述的档案,你可以把想要执行的SQL叙述都集中在一个档案中。以建立课程范例资料库的「cmdev.sql」档案来说,它的内容会像这样:
MySQL使用分号作为预设的delimiter,delimiter在SQL script档案中的使用是很重要的,MySQL在执行档案中的叙述时,是以delimiter来分辨一个SQL叙述的范围。MySQL提供「DELIMITER」指令,可以修改预设的delimiter符号:
在一般的应用时,你通常不会去修改预设的delimiter符号;可是在建立Stored routines元件的SQL script档案中就一定要使用了。下列是建立Stored procedure元件的基本内容:
在「MySQL Workbench」中选择功能表「File > New Query Tab」,接下来就可以输入下列建立procedure的叙述:
完成建立procedure的叙述后,要执行这个叙述来建立需要的procedure元件:
上列范例所建立的「show_countries」procedure元件中,只有包含一个查询国家资料的叙述,如果一个procedure元件执行的工作只是这样的话,应该就不需要建立procedure元件了。所以procedure元件通常会包含许多要执行的叙述,这时候就一定要使用「BEGIN」与「END」。下列是建立包含多个叙述Stored procedure元件的基本内容:
以下列的「my_world_count」procedure元件来说,它可以一次查询国家、语言与城市三个表格的数量:
使用SQL script建立functions同样要使用「DELIMITER」关键字设定delimiter。「CREATE FUNCTION」的语法另外包含「RETURNS」与「RETURN」两个关键字。下列是建立Stored functions的基本内容:
以下列的「my_date」Stored function来说,它会传回「年/月/日时:分:秒星期」格式的日期时间资料:
如果function元件包含许多要执行的叙述,也一定要使用「BEGIN」与「END」。下列是建立包含多个叙述Stored functions元件的基本内容:
下列建立「my_date2」Stored function的叙述中,因为包含多个叙述,所以一定要使用「BEGIN」与「END」:
注:在Stored routines中使用「DECLARE」与「SET」在「Sotred Routines的变数与流程」中讨论。
除了使用SQL script建立需要的Stored Procedures外,你也可以使用「MySQL Workbench」提供的功能来管理Stored Procedures。以建立procedure元件来说,在「Stored Procedures」目录上按滑鼠右键后选择「Create Stored Procedure…」:
MySQL Workbench会帮你准备一个建立procedure元件的样版,你只要在「BEGIN」与「END」之间,输入这个procedure元件需要执行的叙述,再选择「Apply」按钮:
在确认的视窗选择「Apply」按钮:
最后选择「Finish」就可以建立指定的Stored Procedure:
在建立好的Stored Procedure上按滑鼠右键后选择「Alter Stored Procedure…」和「Drop Stored Procedure…」可以修改或删除指定的Stored Procedure。
你也可以使用「MySQL Workbench」提供的功能来管理Stored functions。以建立function元件来说,在「Functions」目录上按滑鼠右键后选择「Create Function…」:
MySQL Workbench会帮你准备一个建立Function元件的样版,输入这个Function的内容后,再选择「Apply」按钮:
在确认的视窗选择「Apply」按钮:
最后选择「Finish」就可以建立指定的Function:
在建立好的Function上按滑鼠右键后选择「Alter Function…」和「Drop Function…」可以修改或删除指定的Function。