Informix数据库的存储过程
1.存储过程是⼀个⽤户定义的函数,由存储过程语句SPL(Stored Procedure Language)和⼀组SQL语句组成。
2.存储过程语⾔(Stored Procedure Language),只能与在存储过程中,主要分为以下⼏类:
(1)变量定义和赋值:define、let
(2)流程控制:if then else if else end if;
循环语句:for、foreach、while、exit、continue
(3)函数调⽤与返回:call、system、return
(4)错误处理和调试:trace、on exception、raise exception
例⼦:
drop procedure count_add;
create procedure count_add(user_name_var varchar(50) default 'administrator') returning varchar(50);
define error_count_var integer;
select error_count into error_count_var from users where user_name = user_name_var;
let error_name_var = error_name_var 1;
update users set error_count = error_count_var where user_name = user_name_var return user_name_var;
return user_name_var with resume;
end procedure document 'this is a error count procedure' with listing in '/export/home/';
3.创建存储过程
语法:
CREATE [DBA] PROCEDURE 过程名(参数 数据类型.......)
RETURNING⼦句
语句块
END PROCEDURE
document⼦句
WITH LISTING IN⽂件名
其中过程名:创建存储过程的名称;
parameter数据类型参数:调⽤存储过程所需的参数个数和类型;
RETURNING⼦句:可以返回任何值,可以返回⼀个或者多个值,也可以返回多组值。
语句块:由SPL语句和SQL语句组成。
document⼦句:对存储过程做⼀些说明,可以省略。
WITH LISTING IN⽂件名:接收编译器输出信息的⽂件名,可以省略,编译器不产⽣输出。
例⼦
create procedure procname(var_num integer default null)
delete from proctable where colno = var_num;
end procedure;
execute procedure procname(11);
从存储过程中返回0个或多个值,其中return语句的返回值的个数和类型必须与创建存储过程时说明的returning⼦句的返回值个数和类型相同,或者不返回任何值
create procedure proc_new() returning int,int;
define num1;
define num2;
.......
return num1,num2;
end procedure;
5.从SQL语句中调⽤存储过程
select * from users where number = proc_new(23);
6.call语句
从⼀个存储过程中调⽤另⼀个存储过程 两种格式:
CALL 过程名(参数....) RETURNING 变量,...;
CALL 过程名(参数名=参数,....) RETURNING 变量,...;
7.存储过程语⾔
变量
1.局部变量
仅在本存储过程中有效的变量,局部变量不允许有缺省值;
2.全局变量
在同⼀⽤户活动期间,存储过程中的被统⼀数据库的其他存储过程访问的变量,全局变量必须在所有的存储过程中定义,并且必须给出缺省值,实际的缺省值是第⼀次被访问时定义的缺省值。
8.局部变量的定义
使⽤define语句定义变量,其类型可以是除了serial数据类型外的所有SQL数据类型;定义text或者byte类型变量时,需要在变量前标注references,以表明该变量不含真正的数据,只是指向数据的指针;
可以使⽤like定义与字段类型⼀致的数据类型。
如: DEFINE i,j INT; DEFINE name VARCHAR(20);
DEFINE time_stamp DATETIME YEAR TO SECOND DEFAULE CURRENT YEAR TO SECOND;
DEFINE txt REFERENCES TEXT;
DEFINE by REFERENCES BYTE;
DEFINE p_customer LIKE users.cutomer_num;
9.变量赋值
(1)使⽤LET语句
LET i,j = 1,0;
LET var_name,var_num = (select username ,usernum from users where usernum = 100;)
(2)使⽤SELECT或INTO语句
select username into var_name from users where usernum = 100;
(3)利⽤CALL语句
call proc_new(22) returning var_no1;
(4)利⽤INTO语句
execute proceduce proc_name(username,address into p_name,p_addr);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论