Informix数据库的存储过程
2017-12-12 16:37
836 查看
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/xie/errorcount.txt';
3.创建存储过程
语法:
CREATE [DBA] PROCEDURE 过程名(参数 数据类型.......)
RETURNING子句
语句块
END PROCEDURE
document子句
WITH LISTING IN文件名
其中过程名:创建存储过程的名称;
参数:调用存储过程所需的参数个数和类型;
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);
4.return语句
从存储过程中返回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或SELECT...INTO语句
select username into var_name from users where usernum = 100;
(3)利用CALL语句
call proc_new(22) returning var_no1;
(4)利用EXECUTE PROCEDURE...INTO语句
execute proceduce proc_name(username,address into p_name,p_addr);
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/xie/errorcount.txt';
3.创建存储过程
语法:
CREATE [DBA] PROCEDURE 过程名(参数 数据类型.......)
RETURNING子句
语句块
END PROCEDURE
document子句
WITH LISTING IN文件名
其中过程名:创建存储过程的名称;
参数:调用存储过程所需的参数个数和类型;
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);
4.return语句
从存储过程中返回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或SELECT...INTO语句
select username into var_name from users where usernum = 100;
(3)利用CALL语句
call proc_new(22) returning var_no1;
(4)利用EXECUTE PROCEDURE...INTO语句
execute proceduce proc_name(username,address into p_name,p_addr);
相关文章推荐
- informix shell 定时执行数据库的存储过程
- Oralce数据库定时执行存储过程的设置
- 备份与恢复数据库的存储过程
- MySQL存储过程和触发器的实现--数据库学习笔记
- 从疯狂痴迷数据库存储过程到彻底放弃他(信息化系统从基于数据库技术到基于服务理念的转变)
- 用于关闭数据库链接的存储过程
- 数据库分页存储过程
- 可以自定义导出数据库的表结构(视图)的一个存储过程
- 关闭数据库连接的存储过程
- 转:WF中的跟踪服务(1):Sql跟踪数据库表,视图,存储过程等相关说明
- MSSQL数据库:存储过程学习
- Linq to Oracle 使用教程(七)将数据库的存储过程映射到方法
- 数据库中的存储过程
- 数据库开发之存储过程、触发器、游标
- Hibernate HQL基础 调用数据库存储过程
- java中使用jdbc和mybatis调用数据库中的存储过程和函数
- SQL Server 2000数据库存储过程的调用(VB)
- 集算器调用数据库存储过程的代码示例
- 存储过程调用不同数据库的数据
- 存储过程跨系统跨数据库操作