暂无 |

3 Stored Routines的参数

Stored routines可以使用参数(parameters)让使用者传送资料给stored routines使用,procedures与functions都可以依照需要决定参数的个数与型态。

3.1 Stored Functions的参数

Functions参数的决定会比procedures简单,因为functions的参数只是用来接收资料后,在functions中使用。你必须决定每一个参数的名称和型态,再依照想要的顺序定义在functions中:

mysql_13_snap_36

以下列一个合计功能的function来说,它需要两个「INT」型态的整数参数:

mysql_13_snap_37

在呼叫「my_summary」的时候,依照参数的定义,指定两个要合计的整数数值,这个function会将两个传入的整数数值加起来后回传给你:

mysql_13_snap_38

在呼叫function的时候,一定要依照参数的定义,传送正确个数的参数资料:

mysql_13_snap_39

除了参数的个数外,你也要遵守参数型态的规定:

mysql_13_snap_40

一个function的定义不一定需要参数,以下列的范例来说,呼叫「my_date」时并不需要传送任何参数资料,不过无论是否需要参数,在呼叫function时,名称后面的左右刮号是不可以省略的:

mysql_13_snap_41

3.2 Stored Procedures的参数

Procedures参数的定义与functions大致上相同,除了必须决定每一个参数的名称、型态与顺序,你还需要决定每一个参数的用途:

mysql_13_snap_42

下列是参数用途的说明:

  • IN:「输入、input」用的参数。这种参数与functions中的参数完全一样,在呼叫procedures时传送资料给procedures用的
  • OUT:「输出、output」用的参数。在呼叫procedures时,不能接收传送的资料,不过在执行procedures时,可以设定这类参数的值,新的值在执行完成后,可以回传给呼叫的地方使用
  • INOUT:「输入与输出、input与output」用的参数。同时具有「IN」与「OUT」两种用途

下列是一个说明三种用途参数的范例:

mysql_13_snap_43

呼叫procedures时要依照定义的参数个数与型态来传送资料:

mysql_13_snap_44

在呼叫Procedures时传送的参数资料,会因为不同的用途而有不同的限制:

mysql_13_snap_45

如果违反参数用途上的规定就会发生错误:

mysql_13_snap_46

所以在呼叫procedures时,「OUT」与「INOUT」参数必须指定变数名称,这是因为「OUT」与「INOUT」参数在执行完成后会回传资料,使用变数名称才可以接收procedures回传的资料:

mysql_13_snap_47

执行procedures以后,指定给「OUT」与「INOUT」的变数名称,就会储存procedures中设定的值:

mysql_13_snap_48

如果在呼叫procedures之前,先把参数资料设定为使用者变数,再把它们指定给参数使用:

mysql_13_snap_49

执行上列呼叫procedures的叙述后,你可以发现设定为「OUT」用途的参数是不能接收参数资料的;而下列查询使用者变数的叙述,可以发现设定为「IN」用途的参数没有回传资料的功能:

mysql_13_snap_50

以下列的范例来说,呼叫「country_count」需要一个洲名的参数,执行以后,它会使用你的洲名执行查询国家的数量。这个洲名参数的需求,只是用来设定查询条件用的,并不需要回传资料,所以这样的参数适合设定为「IN」:

mysql_13_snap_54

下列的范例先设定好一个使用者变数储存洲名,再呼叫「country_count」:

mysql_13_snap_52

在procedures与functions中,MySQL提供一种特别的查询叙述。一般的查询叙述是用来回传需要的资料用的,而这种查询叙述可以把「SELECT」子句中指定的资料指定给变数:

mysql_13_snap_53

以下列的范例来说,呼叫「country_count2」需要一个洲名的参数,它会使用你的洲名执行查询国家的数量,不过执行以后,它会回传国家的数量给你。所以这个procedure需要第二个参数用来回传国家的数量,以这样的参数需求,国家的数量的参数适合设定为「OUT」:

mysql_13_snap_54

呼叫「country_count2」时要提供洲名与接收国家数量的变数名称,在procedure执行以后,使用者变数「my_count」就会储存国家数量了:

mysql_13_snap_55

 

java教程
php教程
php+mysql教程
ThinkPHP教程
MySQL
C语言
css
javascript
Django教程

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论