GBASE 8s 自定义存储过程和函数示例

一个完整的存储过程示例如下:

CREATE PROCEDURE read_address(lastname CHAR(15))

RETURNING CHAR(15), CHAR(15), CHAR(20), CHAR(5);

DEFINE p_lname, p_fname CHAR(15);

DEFINE p_addr CHAR(20);

DEFINE p_zip CHAR(5);

SELECT fname, address1, zipcode INTO p_fname, p_addr, p_zip

FROM customer

WHERE lname=lastname;

RETURN p_fname, lastname, paddr, p_zip;

END PPROCEDURE

DOCUMENT “this procedure takes the last name of a customer as its

only argument, it returns the name and the address of the customer”

WITH LISTING IN “/tmp/test /listfile”

Foreach 的使用示例如下:

CREATE PROCEDURE foreach_ex()

DEFINE i, j INT;

FOREACH SELECT c1 INTO i FROM tab1 ORDER BY 1

INSERT INTO tab1 VALUES(i)

END FOREACH

FOREACH cur1 FOR SELECT c2, c3 INTO i, j FROM tab1

IF j >100 THEN

DELETE FROM tab1 WHERE CURRENT OF cur1;

CONTINUE FOREACH

END IF

UPDATE tab1 SET c2=c2+10 WHERE CURRENT OF cur1

END FOREACH

FOREACH EXECUTE PROCEDURE bar(10, 20) INTO i

INSERT INTO tab2 VALUE(i);

END FOREACH

END PROCEDURE

函数 function 定义,使用 trace 功能调试存储过程:

CREATE FUNCTION test_trace () RETURNING INT

DEFINE count, a INT;

LET count = 0;

SET DEBUG FILE TO "/tmp/trace_out";

TRACE ON;

LET count = (SELECT count(*) FROM tab1);

RETURN count;

END FUNCTION;

        通过 C 预约自定义 C-UDR,这里假设需要通过 C 程序自定函数查找某个字符出现在字符串中的位置信息。

第一步:vi add_three.c

使用 vi 编辑 add_three.c,内容如下所示。

#include <mi.h>

mi_integer f_add(mi_integer i_num1,mi_integer i_num2)

{

return i_num1 + i_num2;

}

第二步:编译

编译和链接 f_add.c,生成 f_add.so

/usr/bin/gcc -I$INFORMIXDIR/incl -I$INFORMIXDIR/incl/public f_add.c -fPIC -shared -o f_add.so

第三步:注册函数

create function f_add (i_num1 integer,i_num2 integer)

returns integer

external name "/opt/IDS115/myudr/f_add.so(f_add)"

language c;

第四步:可以通过 SQL 使用刚自定义的函数 f_add 

execute function f_add (1,2);

select f_add(tabid,tabid) from systables where tabid=1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八珍豆腐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值