informix-procedure
施晗昱
2023-12-01
/*****************************************************************************************/
informix procedure function
--1 有些操作在 函数中不能执行如:drop ,INSERT 等 ,所以需要 写成 procedure
--2 函数需要有返回值,返回值可以有多个
--3 存储过程也可以有返回值
--4 没有返回值得 存储 过程可以有 OUT 参数
--5 特殊字符
--5.1 单引号要用 ''
例如:let v_sql=' let NEW.DBVERSION = CASE WHEN TO_CHAR(NEW.DBVERSION, ''%Y-%m-%d'') = ''2012-01-01'' THEN NEW.DBVERSION ELSE SYSDATE END; ';
--5.2 不要使用双引号(会在导入导出时引起很大的 麻烦)
/*****************************************************************************************/
一 变量的作用范围
1 全局变量(作用范围 :同一会话中)
CREATE FUNCTION func1() RETURNING INT;
DEFINE GLOBAL gvarINT DEFAULT 2;
LET gvar= gvar+ 1;
RETURN gvar;
END FUNCTION;
CREATE FUNCTION func2()RETURNING INT;
DEFINE GLOBAL gvarINT DEFAULT 5;
LET gvar= gvar+ 1;
RETURN gvar;
END FUNCTION;
--测试
--会话1
> EXECUTE FUNCTION func1();
3
> EXECUTE FUNCTION func2();
4
--会话2
> EXECUTE FUNCTION func2();
6
> EXECUTE FUNCTION func1();
7
2 在 PUBLIC.sysdbopen() 中设置,所有的会话有效
二 集合对象
1 set 只能存放 不同的 值
2 multiset 可以存放相同的值
3 list 可以从某个 位置 INSERT
4 集合对象的 SELECT ,update,delete 需要 cursor 来操作
三 时间类型
1 在存储过程中DATTIME 的字段的取值 是一样 的,为了得到真正的 当前时间,使用下面的 方法.
select DBINFO('UTC_TO_DATETIME',sh_curtime) from sysmaster:sysshmvals)
四 字符串
1 lvarchar(32739) 长字符串 用于拼接各种字符串组合
2 同一个表的 长度不能超过 32767
499: The operation causes a rowsize to exceed the allowable limit (32767).
五 exception
1 在变量定义前 定义
2 自主 raise 异常
3 发生异常 继续执行 END EXCEPTION WITH RESUME