INFORMIX-4GL实用手册(四)(1)
来源:pcdog.com整理 作者: 出处:综艺读书 2006-03-13Informix-SPL(过程)语法详解
|
|
|||
1.创建和执行例程
①.创建例程语法:
CRAETEPROCEDURE[OWNER.]PROCEDURE_NAME(参数1参数类型=[DEFAULT],参数2参数类型=[DEFAULT],参数n参数类型=[DEFAULT])
RETURNING值1类型,值2类型,值n类型;
<......>语句体;ENDRPOCEDURE
例程大小不可超过64K,这包括所有的SQL.SPL.空格.跳格符,例程名最多18个字符,并在数据库中唯一存在,语句间用";"分隔,例程只能在当前数据库中创建,例程创建后是一标准
执行模板块,可在不同的应有中对其调用,这对开发不同版本的应用将更为便利。例:
createprocedure"test".upwage()
definerev_rev_item_codevarchar(2,0);
definerev_p_rev_datedate;
defineacc_rec_prem_nodecimal(8,2);definerev_p_rev_amtdecimal(10,2);definerev_I_info_branchvarchar(6,0);definerev_I_info_appl_nodecimal(8,0);definerev_I_info_datedate;definerev_o_rev_datedate;
definerev_o_rev_amtdecimal(10,2);
defineacc_ac_rev_amntdecimal(10,2);
defineacc_rec_prem_datedate;
beginwork;
foreachcur_revforselectI_info_appl_branch,I_info_appl_no,I_info_date,
o_rev_date,o_rev_amtintorev_I_info_branch,
rev_I_info_appl_no,rev_I_info_date,rev_o_rev_date,rev_o_rev_amtfromrev_rec_tblwhere
(rev_item_code="PS")andp_rev_dateisnulland
p_rev_amt=0and(I_info_appl_noisnotnullor
I_info_dateisnotnull);
selectmax(rec_prem_acc_no)intoacc_rec_prem_nofromrec_prem_accwhereI_info_appl_branch=rev_I_info_branch
andI_info_appl_no=rev_I_info_appl_no
andI_info_date=rev_I_info_date
ando_rev_date=rev_o_rev_date
andrev_item_code="PS"and
ac_rev_amnt=rev_o_rev_amt;
selectdate(rec_prem_date)intoacc_rec_prem_date
fromrec_prem_accwhereI_info_appl_branch=rev_I_info_branch
andI_info_appl_no=rev_I_info_appl_no
andI_info_date=rev_I_info_date
ando_rev_date=rev_o_rev_date
andrev_item_code="PS"and
ac_rev_amnt=rev_o_rev_amtand
rec_prem_acc_no=acc_rec_prem_no;
selectac_rev_amntintoacc_ac_rev_amnt
fromrec_prem_acc
whereI_info_appl_branch=rev_I_info_branch
andI_info_appl_no=rev_I_info_appl_no
andI_info_date=rev_I_info_date
ando_rev_date=rev_o_rev_date
andrev_item_code="PS"
andrec_prem_acc_no=acc_rec_prem_no
andac_rev_amnt=rev_o_rev_amt;
ifacc_ac_rev_amntisnulloracc_rec_prem_dateisnullthen
continueforeach;
endif;
updaterev_rec_tbl
setp_rev_date=acc_rec_prem_date,
p_rev_amt=acc_ac_rev_amnt
whereI_info_appl_branch=rev_I_info_branch
andI_info_date=rev_I_info_date
andI_info_appl_no=rev_I_info_appl_no
ando_rev_date=rev_o_rev_date;
endforeach;
commitwork;
endprocedure;
②.执行例程语法:
A):在dbaccess中
EXECUTEPROCEDUREDBNAME@SERVER_NAME:例程名(参数1,参数2,.....)用这种方法可对例程进行调试。
B):在Informix-4GL中
PREPAREPREPSTATTEMENTFROM"EXECUTEPROCEDUREDBNAME@SERVER_NAME:例程名(?,?,?,...)
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语句将以逻辑名为准指向后台数据库例程,当例程即便没有参数也必须有小扩号.
更多内容请看informix informix基础专题,或进入讨论组讨论。
·开发优质高效的Informix数据库应用程序(4) 11-17
·开发优质高效的Informix数据库应用程序(3) 11-17
·开发优质高效的Informix数据库应用程序(2) 11-17
·Informix TRAIN 文档详解(5) 11-17
·Informix TRAIN 文档详解(4) 11-17
·Informix TRAIN 文档详解(3) 11-17
·Informix TRAIN 文档详解(2) 11-17
·Informix的监控和管理命令(2) 11-17
·Informix 5的安装及初始配置(2) 11-17
|
|||
| ·ACDSEE专题教程-下载使用 ·迅雷专题教程-下载使用 ·Windows XP频道 ·Windows Vista频道 ·Windows 2000频道 ·win2003频道 ·Freebsd频道 ·Oracle频道 |
·Linux频道 ·Windows频道 ·邮件服务器专题 ·协议大全 ·数据恢复指南教程 ·FreeBSD使用教程 ·Linux数据库宝典 ·Linux基础知识 |
||
| · 秘密:Vista隐蔽的动态屏保 · 腾讯开发新电子宠物--QQ熊 · 惠普否认2999元PC有价无货 |
· 驱逐Win系统“流氓”文件 · WinXP中获取未使用的IP地址 · 尝试format C:格式化硬盘? |
| · 在DOS下恢复回收站中的文件 · 拯救WinXP崩溃的救命稻草 · Linux系统中超级权限的应用 |
· 搜狗PK谷歌:谁能代言拼... · 昨日重现,一键GHOST轻松.. · 实现Web迅雷在空闲时杀毒 |
| · AVIFile函数制做AVI文件 · VC中链接动态链接库的方法 · 熊猫烧香核心源码(Delphi) |
· DateDiff函数祥解 · JavaScript去除空格的三种 · js效果 图片加载进度实时.. |
| · SQL Server数据库优化方案 · Oracle的初学者入门心得 · JSP连接Mysql数据库 |
· Photoshop为美女做艺术处理 · 用Freehand创建发光字特效 · 设计自己的个性QQ动态表情 |




