oracle存储过程入门

今天第一次写oracle的存储过程,请别人修改正确后,简单根据例子总结一下存储过程的结构。

例子:

create or replace procedure add_rand_from_expens[(param1 IN NUMBER,param2 OUT NUMBER)]--1
  is[as]--2
  bound number(5);--3
  begin
    for counter in (select * from clinet) loop --4
      update clinet t set expens = expens+round(dbms_random.value(0,10))
      where t.id = counter.id;
    end loop; 
  exception --5
    when NO_DATA_FOUND then
      dbms_output.put_line('表中缺失数据');
    when others then
    dbms_output.put_line('未知异常');
end;

  

  1、入参中的IN,OUT关键字可以理解为修饰符,被修饰为IN的参数只读,不能再存储过程中更改其值;被修饰为OUT的参数在数据库中可以更改其值;没有参数则可以省略()

  2、IS,AS用在此处都可以,没有区别,IS到BEGIN之间都是定义变量或者常量。

  3、定义变量或常量时可以赋值

  4、for loop是plsql提供的一种结构化语言,有点类似于java中的for each的用法。for loop 中的范围是一个闭区间,比如0..100会循环101次,例子中counter数据类型是%ROWTYPE,代表一条记录,感觉有点面向对象的意思。

  5、exception是异常处理,oracle中的异常类型有很多,也可以自定义异常。具体请参考别人的文章 总结:整理 oracle异常错误处理

 

mysql与oracle在存储过程上的坑:

1、mysql没有package的概念,oracle存储过程可以写在包里;

2、如果存储过程的入参是字符,oracle要求写成varchar2,mysql要求写成varchar(SIZE);

3、oracle允许CREATE OR REPLACE语法,mysql则必须先删除(DROP PROCEDURE IF EXISTS...),再创建新的存储过程;

4、oracle调用存储过程就跟调用函数一样,直接过程名+入参,mysql调用时则需要使用CALL关键字;

5、其它的诸如mysql 不需要IS等细节,不再赘述,总之,mysql的语法相对自由简洁,但欠缺的功能就需要自己手动补上了。

 

posted @ 2019-10-12 10:48  勤勉是最基本的要求  阅读(348)  评论(0)    收藏  举报