一、存储过程概述
存储过程是一个用户定义的函数,由存储过程语句(SPL) 和一组SQL语句组成,以可以执行代码形式存储在数据库中,和表、视图、索引等一样,是数据库的一种对象。存储过程语言SPL(Stored Procedure Language),只能用在存储过程中,可以分成下面几类:
变量定义和赋值:define,let
流程控制:
分支控制:
if then
elif
else
end if;循环控制:
FOR,FOREACH,WHILE,EXIT, CONTINUE
函数调用与返回
CALL, SYSTEM ,RETURN
错误处理和调试
TRACE, ON EXCEPTION, RAISE EXCEPTION
二、存储过程建立 (一定要在dbaccess环境下)
create procedure cj()
update table1 set name = 'cc' where id=1;
end procedure;
三、存储过程的执行(在dbvis工具和dbaccess环境下均可以操作)
execute procedure cj()
四、循环语句foreach
用 FOREACH 语句可以查询或操作一组记录
FOREACH 隐式定义并打开一个游标
三种格式
FOREACH [WITH HOLD] SELECT ... INTO 语句
语句块
END FOREACH;
-FOREACH 游标名[WITH HOLD] FOR SELECT ... INTO 语句
语句块
END FOREACH;
FOREACH EXECUTE PROCEDURE 存储过程名(参数...参数)
INTO 变量[, 变量[, ...]] 语句块
END FOREACH;
FOREACH 定义的游标在以下情况下关闭:无行返回
事务提交或回滚导致非保护游标关闭
循环非正常退出(使用EXIT 或 ON EXCEPTION)
四、批处理执行
create procedure pro_foreach2()
define sid integer;
foreach select id into sid from table1 where id=1
update table1 set name = 'dsfass' where id = sid;(注意这里的分号一定要打)
end foreach;
end procedure;
4、存储过程和游标结合
create procedure pHasCursor()
define v_f1 integer;
begin
on exception
rollback work;
return;
end exception
begin work;
foreach curt1 with hold for
select id into v_f1 from table1
if (v_f1= 1) then
update table1 set name = 'one' where current of curt1;
elif (v_f1 = 2) then
update table1 set name = 'two' where current of curt1;
end if;
end foreach;
commit work;
end;
end procedure;
存储过程是一个用户定义的函数,由存储过程语句(SPL) 和一组SQL语句组成,以可以执行代码形式存储在数据库中,和表、视图、索引等一样,是数据库的一种对象。存储过程语言SPL(Stored Procedure Language),只能用在存储过程中,可以分成下面几类:
变量定义和赋值:define,let
流程控制:
分支控制:
if then
elif
else
end if;循环控制:
FOR,FOREACH,WHILE,EXIT, CONTINUE
函数调用与返回
CALL, SYSTEM ,RETURN
错误处理和调试
TRACE, ON EXCEPTION, RAISE EXCEPTION
二、存储过程建立 (一定要在dbaccess环境下)
create procedure cj()
update table1 set name = 'cc' where id=1;
end procedure;
三、存储过程的执行(在dbvis工具和dbaccess环境下均可以操作)
execute procedure cj()
四、循环语句foreach
用 FOREACH 语句可以查询或操作一组记录
FOREACH 隐式定义并打开一个游标
三种格式
FOREACH [WITH HOLD] SELECT ... INTO 语句
语句块
END FOREACH;
-FOREACH 游标名[WITH HOLD] FOR SELECT ... INTO 语句
语句块
END FOREACH;
FOREACH EXECUTE PROCEDURE 存储过程名(参数...参数)
INTO 变量[, 变量[, ...]] 语句块
END FOREACH;
FOREACH 定义的游标在以下情况下关闭:无行返回
事务提交或回滚导致非保护游标关闭
循环非正常退出(使用EXIT 或 ON EXCEPTION)
四、批处理执行
create procedure pro_foreach2()
define sid integer;
foreach select id into sid from table1 where id=1
update table1 set name = 'dsfass' where id = sid;(注意这里的分号一定要打)
end foreach;
end procedure;
4、存储过程和游标结合
create procedure pHasCursor()
define v_f1 integer;
begin
on exception
rollback work;
return;
end exception
begin work;
foreach curt1 with hold for
select id into v_f1 from table1
if (v_f1= 1) then
update table1 set name = 'one' where current of curt1;
elif (v_f1 = 2) then
update table1 set name = 'two' where current of curt1;
end if;
end foreach;
commit work;
end;
end procedure;