云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 如何编写INFORMIX的存储过程

如何编写INFORMIX的存储过程

  • 62 次阅读
  • 3 次下载
  • 2025/12/10 1:26:10

系统检查数据库服务器内存中的字典,查找该表的触发器及正在执行SQL语句类型。如果触发器存在,则将其检索出来,优化,并由数据库服务器在恰当的时候执行。

INFORMIX三类触发:指定事件发生之前(BEFORE)、指定事件触发每行数据后(FOR EACH

ROW)、指定事件完成后(AFTER)。

创建一个触发器,需要注意以下几点:

触发器命名(CREATE TRIGGER trigger_name);

定义触发器事件,即表名和启动触发器操作的施加于表上的动作类型(UPDATE、

INSERT、DELETE ON 表名);

定义触发时间点:before, after, for each row 定义触发执行的SQL语句;

--drop trigger ti_ts;

CREATE TRIGGER ti_ts INSERT ON ts referencing new as post for each row

(EXECUTE PROCEDURE ti_ts_proc(post.id,post.dw,post.status,post.sign) );

在TRIGGER中可把当前记录的数据传给存贮过程,也可由存贮过程返回数据给当前记录中的部分字段(Nontriggering Columns)。

CREATE TRIGGER upd_totpr

UPDATE OF quantity ON items

REFERNCING OLD AS pre_upd NEW AS post_upd FOR EACH ROW

(EXECUTE PROCEDURE calc_totpr

(pre_upd.quantity, Post_upd.quantity, pre_upd.total

) INTO total_price );

The total_price column is updated for each row that the triggering statement affects.

USING the WHEN Condition

CREATE TRIGGER upd_totpr

UPDATE OF quantity ON items

REFERNCING OLD AS pre_upd NEW AS post_upd

FOR EACH ROW WHEN (post_upd.quantity>=pre_upd.quantity*1.3)

(EXECUTE PROCEDURE calc_totpr

(pre_upd.quantity, Post_upd.quantity, pre_upd.total

) INTO total_price

);

六、错误调试

1、字符变量必须赋给非空的初值,否则参与所有运算后其值都是NULL;

let index,str1=1,null; --》应将STR1的值改为‘’; while index<=length(new_pass)

let v_pass=(char_ascii(substr(new_pass,index,1))-ms_sum); let str1=str1||v_pass;

trace 'str1='||str1; ---》其值始终为NULL; let index=index+1; end while;

-------------------------------- drop procedure sp_wd1 create procedure sp_wd1() returning varchar(100);

define tmp_return varchar(100) ; let tmp_return = null;

IF nvl (SUBSTR(tmp_return, 1, 1), 0) = '0' THEN RETURN \ else RETURN \ END IF; end procedure;

运行结果:(expression) nvl(SUBSTR(tmp_return,1,1),0) = '0': true

当 IF 判断条件中有NULL值时,因运算结果为NULL,故判断出的结果始终不为1,即是FALSE。如:

if tmp_return<>0 then ..... else

..... (不论判断条件是等于或是不等于0, 程序都进入FALSE分支。) end if ;

2、对视图的增、删、改操作(with check option)

对视图增、删、改的操作结果与视图的定义有一定的关系;

3、查看一张表的权限情况

select * from sysmaster:systabauth where tabid= (select tabid from systables where tabname='ts' );

查询结果:

grantor grantee tabid tabauth informix public 118 s-------

只有SELECT权限;

4、并发操作时的锁机制

shared lock(共享锁):在共享锁有效期间不允许被修改;一个数据对象上(表、字段等)可加载多个共享锁。

exclusive lock(排它锁): promotable lock():

如何判断操作是否成功?

5、事务处理

存贮过程中每COMMIT 或 ROLLBACK一次,则所有打开的游标都被关闭。

6、没有ON EXCEPTION语句,出错怎么办?

如果存贮过程中无ON EXCEPTION语句,当出现异常时,直接退出存贮过程。

在父过程中有ON EXCEPTION语句而子过程中没有,当子过程中有异常出现时,子过程中断运行,错误号被父过程的ON EXCEPTION语句捕获,由有父过程错误处理语句进行处理。

-------- 子过程 -------------------------------- drop procedure wd_test_multi_line;

create procedure wd_test_multi_line() returning varchar(100); define name like customer.fname;

select fname into name from customer; -- 无WHERE子句,有多个返回值,出错284

号,存贮过程由此返回,剩下的语句不执行。

trace \ let name=\ return name; end procedure;

-------- 父过程 --------------------------------- drop procedure wd_test_no_excep;

create procedure wd_test_no_excep() returning varchar(100); define ch1 varchar(100); define i,j int;

on exception set i,j,ch1

trace \ j=\ ch1=\ return \ end exception;

set debug file to \ trace on;

let ch1=today;

let ch1=wd_test_multi_line(); --调用无ON EXCEPTION的子存贮过程。 trace off; return ch1; end procedure;

----------------------------------------------------- 调试文档: trace on

let ch1 = 01/07/1997

execute procedure cq97.wd_test_multi_line () exception : looking for handler

SQL error = -284 ISAM error = 0 error string = = \; -- 在子过程中的出错信息 exception : no appropriate handler exception : looking for handler

SQL error = -284 ISAM error = 0 error string = = \exception : handler FOUND

expression:(|| (|| (|| (|| (|| \ j=\ ch1=\evaluates to i=-284 j=0 ch1=

trace expression :i=-284 j=0 ch1= ;-- 在父过程中的错误处理

搜索更多关于: 如何编写INFORMIX的存储过程 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

系统检查数据库服务器内存中的字典,查找该表的触发器及正在执行SQL语句类型。如果触发器存在,则将其检索出来,优化,并由数据库服务器在恰当的时候执行。 INFORMIX三类触发:指定事件发生之前(BEFORE)、指定事件触发每行数据后(FOR EACH ROW)、指定事件完成后(AFTER)。 创建一个触发器,需要注意以下几点: 触发器命名(CREATE TRIGGER trigger_name); 定义触发器事件,即表名和启动触发器操作的施加于表上的动作类型(UPDATE、INSERT、DELETE ON 表名); 定义触发时间点:before, after, for each row 定义触发执行的SQL语句; --drop trigger ti_ts;

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com