您的位置:首页 > 数据库

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: