INFORMIX的存储过程.doc

INFORMIX的存储过程

INFORMIX的存储过程 存贮过程是已命名的、预编译的、典型的SQL集。数据库存贮过程使程序员能够在数据库中定义所有应用程序都可以使用的过程化SQL语句。用存贮过程来完成数据库的修改使程序员能够增强数据库的安全性、完整性并提高性能。由于存贮过程提供了条件执行,因此也可以用来执行附加商务规则。 存贮过程是SQL语句和SPL的集合。它们存放在数据库中,而SQL则被分析、优化,并产生一执行规划,永久地存放在当前库(非SYSMASTER库)的SYSPROCEDURES(过程名)、SYSPROCBODY(代码)、SYSPROCPLAN(编译后的规划)系统表中。当存贮过程被执行时,直接从库中调用优化后的代码进行运行,因此大大提高了SQL的性能、效率,极大增强了SQL语句和批处理的性能。 1、编辑存贮过程:可用通用的文本编辑器对存贮过程进行编辑,然后将文件放到主机上。注意,如果采用在DBACCESS中以批处理方式编译存贮过程,则存贮过程的源文件名的后缀必须以sql结尾,文件存放的目录必须在启动DBACCESS的目录下。 2、创建(编译)存贮过程:产生一执行规划(编译后的代码),永久存放在数据库系统表中。 存贮过程由SQL语句CREATE PROCEDURE “过程名”创建。当该语句被执行时(如在DBACCESS中按批处理运行),包含在CREATE PROCEDURE和END PROCEDURE之间的所有代码首先进行语法检查,然后被解析、优化,以过程名为标识符,存放在数据库中,等待执行。 可以用WITH LISTING IN ‘PATHNAME’关键字把编译的警告信息存放到指定的文件中。 3、执行存贮过程:调用执行规划。 用SQL语句EXECUTE PROCEDURE或SPL语句CALL/LET按存贮过程名进行调用,则库中编译好的执行规划将被调出直接运行,这样可得到较高的运行效率。 可把存贮过程当作一个函数,直接在 SELECT 语句中调用,如: select char_ascii(‘a’) as value from dw; SELECT customer_num, lname, get_orders(customer_num) n_orders FROM customer; 类似于表、视图、用户等,存贮过程也是一个数据库对象,其名称必须符合标识符命名规则(18字符长,以字符或_开始),也只能在当前数据库中创建,并赋予一定的权限。 SYSPRC表的内容: prc_hashno 24 prc_chainno 0 prc_id 1505 prc_refcnt 0 prc_delete 0 prc_heapptr 388571168 prc_heapsz 1 prc_servername oncq97data prc_dbname dev_data prc_ownername develop prc_name wd_proc1 当修改wd_proc1,再次创建后,SYSPRC表中查不到此存贮过程的记录;当执行存贮过程后,SYSPRC表中又出现该记录;?? 二、存贮过程的总体结构 存贮过程的输入、输出参数都必须显式给出; -- ****** 创建 TS 表 INSERT 触发器的存贮过程 ******/ -- 功能:根据TS表中处理单位的信息,在CL表中向相关单位 -- 生成一条或多条处理记录(每个单位一条记录,最多三个单位); -- 传入参数:dw, id, status, sign DROP PROCEDURE ti_ts_proc; CREATE PROCEDURE ti_ts_proc ( id char(12), dw char(9), status char(1),sign char(1) ) DEFINE dd date ; DEFINE first_dw char(3); DEFINE second_dw char(3); DEFINE sql_err,isam_err INT; DEFINE error char(80); -------- 出错处理 ---------------------- ON EXCEPTION SET sql_err,isam_err,error TRACE SQL err no: ||sql_err; TRACE ISAM err no: ||isam_err; TRACE error message: ||error; END EXCEPTION SET DEBUG F

文档评论(0)

1亿VIP精品文档

相关文档