存储过程语言

局部变量

仅在本存储过程中有效的变量。局部变量不允许有缺省值

全局变量

在同一用户活动期间,存储过程中的可被同一数据库的其他存储过程访问的变量。全局变量必须在所有使用的存储过程中定义,并且必须给出缺省值,实际的缺省值是第一次被访问时定义的缺省值。

局部变量的范围

变量在语句块内有效,如语句块嵌套,则同名的内层定义覆盖其外层定义,内层语句执行完成后,外层定义重新有效。

变量的定义

用define定义变量。
如: define x int;

变量四种赋值方式

  • 利用let语句
  • 利用select或select…into语句
  • 利用call语句
  • 利用execute procedure…into语句

例子:

- let a, b = c, d;
- let a, b = (select empname, empno from emp
                        where empno = 125);
- select empname into name from emp
                        where empno = 120;
- execute procedure read_address('Lamitry')
                into p_fname, p_lname, p_addr;
- call read_address('Lamitry')
        returning p_fname, p_lname, p_addr;

存储过程表达式

存储过程表达式可以是除聚集函数表达式外的任何SQL算术表达式
例子:

var 1; var1 + var2 + 5 ;
    get_duedat(lastname = 'Lamitry');

IF - THEN - ELSE

格式:

if ··· then
   ···
elif ··· then
   ···
else
   ···
end if

循环语句WHILE

while与foreach的区别:

while循环的条件是不定的,循环次数不定,因而可能出现无穷循环;
for与foreach循环的条件是确定的,循环次数也是明确的,不可能出现无穷循环。

例子:

let i = 1;
while i<10
    insert into tab2 values(i);
    let i = i+1;
end while

循环语句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定义的游标在以下情况下关闭:
1. 无行返回
2. 事务提交或回滚导致非保护游标关闭
3. 循环非正常退出(使用EXIT或ON EXCEPTION)

临时表

创建与删除:
create temp 名....... drop tabel 名 cascade;

事务控制

事务的作用:维护数据的一致性。

on exception
    rollback work;
end exception

begin work;
    delete from....
    update ...
    insert into ...
commit work;

异常处理

如果存储过程中没有异常处理语句,那么运行到异常处将会中断。
异常捕获:ON EXCEPTION
示例:下例捕获多个错误,并采取相应的措施。若错误号为300采取措施B,若错误号为210,211,212采取措施A,若为其他错误,采取措施C

on exception set error_num
    ---Action c
end exception
on exception in(-300)set error_num
    ---Action b
end exception
on exception in(-210,-211,-212)set error_num
    ---Action a
end exception

异常捕获:RAISE EXCEPTION
用RAISE EXCEPTION语句模拟异常的产生,该异常可被ON EXCEPTION语句捕获。
格式:
RAISE EXCEPTION 错误号,ISAM 错误号, 错误 文本变量
SQL错误号和ISAM错误号均可使SPL表达式,且其计算结果是一个常数(错误号)

存储过程的权限

两类存储过程

  • DBA权限存储过程
  • 所有者权限存储过程

下列用户可以创建存储过程

  • 具有RESOURCE权限的用户可以创建存储过程

下列用户可以执行存储过程

  • DBA用户
  • 存储过程的创建者
  • 具有EXECUTE权限的用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值