(?,?,?,...)
DECLAREP_CURSSURSORFORPREPSTMT
OPENP_CURSUSING参数1,参数2,....
FETCHP_CURSINTO返回值1,返回值2,...
CLOSEP_CURS
当应用程序不支持EXECUTPROCEDURE语法,则需使用PREPARE命令,如INFORMIX-4GL中,而使用INFORMIX-NEWEAR则无此限制,需注意的是PREPARE语句中变量用?号代替,其个数要与例程的参数个数和类型一致,返回值也是一样。
C):在Informix-ESQL/C中
EXECSQLEXECUTEPROCEDURE例程名(参数1,参数2,...)INTO(返回值1,返回值2,...)在EC5.0或更高版本可使用EXECUTEPROCEDURE语法,在ESQL/C中宿主变量用于想存储例程传递值,同时也接收返回值.
D):在POWERBUILDER中
DECLARE逻辑名PROCEDUREFOR例程名(:参数1,:参数2:...)INTO:返回值1,:返回值2,..USING事物名
EXEC例程名(:参数1,:参数2,.....)
PB要求为例程制定逻辑名,以后的SQL语句将以逻辑名为准指向后台数据库例程,当例程即便没有参数也必须有小扩号.
2.流程控制语言
在过程中也提供了其他语言具备的流程控制语言,完成循环判断和分类处理的能力,主要有:①.IF....ELIF.....ELSE.....ENDIF例:
CRAETEPROCEDURESTR_COM(STR1CHAR(20),STR2CHAR(20))
RETURNINGINT;
DEFINERELINT;
IFSTR1>STR2THEN--当STR1>STR2REL=1
LETREL=1;
ELIFSTR2>STR1THEN--当STR2>STR1REL=-1
LETREL=-1; ELSE
LETREL=0;--当STR1=STR2REL=0 ENDIF
RETUENREL;
ENDPROCEDURE
当IF的条件为一个SQL语句如SELECT时需用扩号,并且返回值为单值。
②.FOR.....ENDFOR
例:FORINDEXIN(20TO30STEP2,100TO200STEP10)
--执行代码
ENDFOR
FOR的条件可以是变量,常量或一个SQL语句的返回值
③.WHILE.......ENDWHILE
当WHILE的条件为TRUE时执行WHILE后的语句,为FALSE退出循环。
例:WHILEI<10
INSERTINTOTBB_1VALUES(I);
LETI=I+1;
ENDWHILE;
④.FOREACH........ENDFOREACH
该语句较为特别FOREACH循环能够声明并打开游标,读取记录行,并关闭游标.其完整语法:
FOREACH游标名[WITHHOLD]SELECT字段名INTO变量FROM
TABLEWHERE条件;
ENDFOREACH
FOREACHEXECUTEPROCEDURE例程名(参数1,参数2,..)INTO 变量
ENDFOREACH
该循环中语句的执行次数与SELECT和EXECUTEPROCEDURE语句返回的行数一样多。如果FOREACH语句中包含一条EXECUTEPROCEDURE,则循环停止的条件为:
.执行了不带任何参数的RETURN语句
.执行了ENDPROCEDURE
如果没有返回行数据,则不再执行循环中的语句。存储例程中不允许使用滚动游标。
当使用WITHHOLD时,更新游标将放置更新锁,使其他过程无法更新该行,直至事物完成,当在FOREACH循环的语句块中的UPDATE或DELETE有
WHERECURRENTOF短语,则存储例程会自动使用更新游标
例1:BEGINWORK;
FOREACHCUR_1FORSELECTDATEINTOV_DATEFROMTABLE
IFV_DATEISNULLTHEN
DELETEFROMTABLEWHERECURRENTOFCUR_1; ENDIF;
ENDFOREACH;
COMMITWORK;
例2:FOREACHEXECUTEPROCEDUREBAR(10,20)INTOI
INSERTINTOTABLE1VALUES(I)
ENDPROCEDURE
⑤.CONTINUE适用语句(FORWHILEFOREACH)将执行传递给下一次循环⑥.EXIT
适用语句(FORWHILEFOREACH)
从循环中退出
例:FORJ=1TO20
IFJ>10THEN
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库INFORMIX-4GL实用手册(四)(1)(2)在线全文阅读。
相关推荐: