当前位置: 首页 > 工具软件 > Informix > 使用案例 >

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
 类似资料: