全球旧事资料 分类
t_procbegi
声明一个标志do
e,用来判断游标是否遍历完成DECLAREdo
eINTDEFAULT0声明一个变量,用来存放从游标中提取的数据
f特别注意这里的名字不能与由游标中使用的列明相同,否则得到的数据都是NULLDECLAREt
amevarchar50DEFAULTNULLDECLAREtpassvarchar50DEFAULTNULL声明游标对应的SQL语句DECLAREcurCURSORFORselect
amepasswordfrom
eti
gc
_proc_test在游标循环到最后会将do
e设置为1DECLARECONTINUEHANDLERFORNOTFOUNDSETdo
e1执行查询ope
cur遍历游标每一行REPEAT把一行的信息存放在对应的变量中FETCHcurINTOt
ametpassif
otdo
ethe
这里就可以使用t
ame,tpass对应的信息了selectt
ametpasse
difUNTILdo
eENDREPEATCLOSEcure
ddelimiter执行存储过程
fcalltest_proc
需要注意的是变量的声明、游标的声明和HANDLER声明的顺序不能搞错,必须是先声明变量,再申明游标,最后声明HANDLER。上述存储过程的例子中只使用了一个游标,那么如果要使用两个或者更多游标怎么办,其实很简单,可以这么说,一个怎么用两个就是怎么用的。例子如下:
复制代码代码如下
dropprocedureIFEXISTStest_proc_1delimitercreateproceduretest_proc_1begi
DECLAREdo
eINTDEFAULT0DECLAREtidi
t11DEFAULT0DECLAREt
amevarchar50DEFAULTNULLDECLAREtpassvarchar50DEFAULTNULLDECLAREcur_1CURSORFORselect
amepasswordfrom
eti
gc
_proc_testDECLAREcur_2CURSORFORselectid
amefrom
eti
gc
_proc_testDECLARECONTINUEHANDLERFORNOTFOUNDSETdo
e1ope
cur_1REPEATFETCHcur_1INTOt
ametpass
fif
otdo
ethe
selectt
ametpasse
difUNTILdo
eENDREPEATCLOSEcur_1注意这里,一定要重置do
e的值为0setdo
e0ope
cur_2REPEATFETCHcur_2INTOtidt
ameif
otdo
ethe
selecttidt
amee
difUNTILdo
eENDREPEATCLOSEcur_2e
ddelimitercalltest_proc_1
上述代码和第一个例子中基本一样,就是多了一个游标声明和遍历游标。这里需要注意的是,在遍历第二个游标前使用了setdo
e0,因为当第一个游标遍历玩后其值被ha
dler设置为1了,如果不用set把它设置为0,那么第二个游标就不会遍历了。当然好习惯是在
f每个打开游标的操作前都用该语句,确保游标能真正遍历。当然还可以使用begi
语句块嵌套的方式来处理多个游标例如:复制代码代码如下
dropprocedureIFEXISTStest_proc_2delimitercreateproceduretest_proc_2begi
DECLAREdo
eINTDEFAULT0DECLAREt
amevarchar50DEFAULTNULLDECLAREtpassvarchar50DEFAULTNULLDECLAREcur_1CURSORFORselect
amepasswordfrom
eti
gc
_proc_testDECLAREcur_2CURSORFORselectid
amefrom
eti
gc
_proc_testDECLARECONTINUEHAr
好听全球资料 返回顶部