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

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

如何编写INFORMIX的存储过程

  • 62 次阅读
  • 3 次下载
  • 2025/12/10 22:56:42

TRACE 'SQL err no '||sql_err; TRACE 'ISAM err no '||isam_err; TRACE 'error message is \ TRACE 'end running with error.'; END EXCEPTION with resume;

SET DEBUG FILE TO 'debug_wd'; trace on;

select fname into error from customer ; --where fname = 'wwww'; trace 'dbinfo = '||dbinfo('sqlca.sqlerrd2');

foreach select fname into c_fname from customer where fname like \

{ update customer set fname=\;-- 无满足此条件的语句

let i=dbinfo(\ -- 实际测试为0,然后立即退出循环,这时J的值也是

0,J不等于K。

exit foreach; }

let i=dbinfo(\-- FOREACH内测试 end foreach;

let j=dbinfo(\ -- FOREACH外测试

select count(*) into k from customer where fname like \; 直接计数

trace \ trace \

trace 'count(*) = '||k; -- 实际测试,J和K的值保持一致。 trace \end procedure;

10、调用存贮过程时的参数匹配 返回字符时,包含空格?

11、取系统时钟及时间的运算 进入存贮过程后,每次取系统时钟,CURRENT函数都返回同一时间值,不再发生变化;但第二次进入时,CURRENT函数返回不同的时间值。所以,要在同一存贮过程中动态地提取时间,只有专门写一个提取时间的存贮过程,调用后得到变化的时间值。

12、把系统出错号改为自定义的出错号

{ 创建数组 ARRAY-CREATE()

功能:建立一个字符类型的临时表temp_table_char;如果一存在该表,则清空表中的数据; 该临时表由两个字段组成,一个是序号字段,代替数组的下标;另一个为真正的变量。 输入:无

输出:布尔值,成功与否的标志。

}

drop procedure array_create;

CREATE procedure array_create() RETURNING int; DEFINE char_VAL VARCHAR(100);

on exception -- 在on exception可再写RAISE语句,不会死循环,由外部的陷阱处理 raise exception -9998,0,\所有其他错误均统一改成-9998\ -- 经测试,可用。 return 0; end exception;

on exception in (-310) -- Table table-name already exists in database delete from temp_table_char; end exception with resume;

CREATE TEMP TABLE temp_table_char(NUM INT PRIMARY KEY, VAL varchar(100)); raise exception -9990,0,\ RETURN 1; END PROCEDURE;

13、CREATE PROCEDURE 的语法 create procedure sp_array_write

(in_array_id int, in_num int, in_val varchar(200)) ?此处不能加分号;对于returning

相当于是一条独立的语句,要加分号。

语句块; end procedure;

14、SUBSTR的使用

substr(字符变量,起点,截取长度)

当“起点”是负数,且值大于字符串的长度,INFORMIX SERVER死机。重复实验多遍,无一例外。左老师说可能是UNIX未打补丁程序。

由于substr 超界会产生NULL值,而一旦表达式中出现NULL值,则整个表达式的值为NULL,故此必须对substr后的结果进行NVL判断,否则程序可能出现意想不到的错误。

15、FOREACH中的RETURN语句 drop procedure wd_test_order_by;

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

define tmp_fname varchar(100); --------------------------------------------- let i, j = 10, 10 ; ?同时赋值; let tmp_fname = \

foreach select item_num,min( total_price – i ) ? 求运算后金额最小的定单号; into tmp_fname, j from items

group by item_num

order by 2 ? 此处用列的编号或别名; let i=1;

return \dbinfo(\?FOREACH中return可以正常返回; ||\ item_num = \ end foreach; end procedure;

运行结果: (expression) sqlca.sqlerrd2=0 item_num = 5

16、李蒺:ORDER BY 的使用

select item_num,min(abs(total_price)-10) from items group by item_num order by 2; 通过此条语句可找到总金额最小(表达式,在存贮过程中可加变量)的定单号。

17、LPAD、RPAD函数

18、FOR 循环

在测试程序过程发现 :

而在oracle中, 对于 FOR I IN A .. B LOOP END LOOP;

I 变量缺省以升序进行处理,若A > B ,则不进入循环体内。

而在INFORMIX 中,对于 FOR I= A TO B END FOR;

的循环,若A > B ,则 I 变量会自动以降序进行处理,并进入循环体内执行程序, 从而引起错误。

所以INFORMIX 中,若A, B 以变量的形式定义,则要对A,B 的大小进行判断,方法有二: 1) 增加判断语句: IF A >= B THEN FOR I= A TO B END FOR; END IF;

2) 增加STEP 1 ,并对每一个FOR 循环 增加对应的on exception in (-683) 语句。 当 A > B 时,若 增加 STEP 1 , FOR I = A TO B STEP 1 ,则会出现 -683 错误, 所以程序前要增加

on exception in (-683) -- null;

end exception with resume;

特别的,对于两重循环,还要在内循环前增加 on exception in (-683) 语句。如

on exception in (-683) -- null;

end exception with resume; 。。。 。。。 。。。

for j=1 to 5 begin

on exception in (-683) -- null;

end exception with resume; for i =a to b step 1

end for; end;

end for;

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

共分享92篇相关文档

文档简介:

TRACE 'SQL err no '||sql_err; TRACE 'ISAM err no '||isam_err; TRACE 'error message is \ TRACE 'end running with error.'; END EXCEPTION with resume; SET DEBUG FILE TO 'debug_wd'; trace on; select fname into error from customer ; --where fname = 'wwww'; trace 'dbinfo = '||dbinfo('sqlca.sqlerrd2'); foreach select fname into c_fname from cus

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价: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