存储过程篇1--初探Oracle存储过程

初探Oracle存储过程;

存储过程是个好东西,你可以把它理解成一个脚本,可以按照你定义存储过程的条件,在你点击执行的时候,自动触发去执行所要的计算从而得出结果,非常适合需要定时或者定条件做一个相同重复的sql计算。常规的bi报表之类的,库存计算之类的等等等等,功能及其强大。

 

存储过程基本形式:

 

Createor replace procedure A(b  int) as

Begin

Insert/delect/update/select….from;

End;

翻译:

创建或者替换掉存储过程 A(定义一个A参数命名为b 参数类型为int) as后面可以不加变量;

执行区域写入 begin+判断或执行条件 end跳出执行;

这里我们就创建了一个基本的存储过程,这里的create 和 procedure  A  as begin end;是必要的,不可缺少的,我们在创建的时候建议大家一定要加上OR replace,这是代表,如有没有存储过程A,我就创建一个A,如果系统中有了一个存储过程A,我就替换掉它,为什么要替换掉,因为存储过程不允许出现相同名称。所以我们避免创建不成功,一定要家replace。

 

这里我举个列子,我要创建一个测试表的存储过程t_temp:

t_temp表只有四个字段:ext1 varchar,ext2 varchar,ext3varchar,ext4 date

 

我要给表加上内容为 1 1 1,2 2 2;

新建:

createor replace procedure proc_temp_test(a varchar,b varchar,c varchar)

as

begin

  insert into t_temp values(a,b,c,null);

End;

我们存储过程就建好了;

那么怎么执行呢,存储过程建好后运行一次就会保存到数据库的procedures文件夹中:

 

保存好后,我之后要给temp表插入数据,就不用写insert语句了,可以这么写:

Begin:

Procedure proc_temp_test(1,1,1);

End;

这句话代表我要给表插入1 1 1 null 的数据;

执行后,我们select表:

 

 

大家可能有疑问说我插入一条数据,为什么要这么麻烦。对,说得不错,但是如果我要重一张表插入10000条数据到另一张新表,那我我们这里的A B C改成老表的字段,是不是就可以直接begin执行下就可以自己跑了?完全不需要自己手动inert 造10000条数据。

 

 

上面的方法可以用存储过程来insert update select delete等方法,接下来聊聊用存储过程计算:

 

就用上面的数据,我们再插入一条:

Begin:

Procedure proc_temp_test(3,3,3);

End;

这里已经知道接下来查询这张表的结果了对吧:

 

那我们首先来求下有多少行,即count一下数据,在这里引入一个重要的概念,变量,

刚开始存储过程格式中我们有一个叫参数东西,参数这玩意是用来承接外部数据的,什么叫外部数据,比如我给的数据(1,1,1),这就是外部数据,不是存过本身内部产生的数据。我们外部的数据需要让存过计算的时候,存过需要一个去接收数据的东西,而这里我们一般叫做参数,作用就是与纯过外部进行数据交互,可以是承接也可以是把结果传出。

而as后面跟的叫做变量,嗯简单的来说就是让纯过内部使用的。

 

我们之前聊到变量是要加在as后面,写法如下:

createor replace procedure proc_temp_test

as

v_num number;

--这里我定义了一个变量名叫v_num,类型为number类型。

begin

 select count(ext1) into v_num from t_temp;--查询条件

 dbms_output.put_line(v_num);--输出值

  end;

这里我们先不看输出值这条sql,这是输出查询条件的结果的,固定死的一条语句;我们定义了一个变量,之后我执行中查出count值赋给了变量,赋值方式是into,这个一定要写,值给了变量后,输出变量。

 

那么我们来执行下这个存储过程:

  begin

    proc_temp_test;

    end;

   

 

执行完后显示已完成执行,但是没有像sql查询一样给出结果,其实结果是给了的,这是计算输出显示后结果在输出栏,我们切换到输出栏查看结果如下:

 

 

这就是计算,同理,我存储过程中count改为sum在提交后运行一次,结果就变成求和结果:

 

 

 

参数的使用有点概念理解了吧,这次就先学习到这里,循环等等内容我们后续再进行分享。

 

  • 21
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值