• 技术文章 >数据库 >Oracle

    oracle存储过程的作用有哪些

    青灯夜游青灯夜游2022-02-24 18:27:40原创123

    oracle存储过程的作用有:1、简化复杂的操作,降低总体开发成本;2、增加数据独立性;3、可以有效降低错误出现的几率,提高安全性;4、提高性能。

    本教程操作环境:Windows7系统、Oracle 11g版、Dell G3电脑。

    Oracle存储过程在实际数据库开发过程当中会经常使用到,作为一个数据库开发者必备的技能,它有着SQL语句不可替代的作用。所谓存储过程,就是一段存储在数据库中执行某块业务功能的程序模块。它是由一段或者多段的PL/SQL代码块或者SQL语句组成的一系列代码块。

    存储过程的作用(优点):

    创建Oracle存储过程语法:

    create [or replace] procedure 过程名
    ( p1 in|out datatype,
      p2 in|out datatype,
      ...
      pn in|out datatype
        
    ) is 
        
        ....--声明部分
        begin
        
        ....--过程体
        end;

    语法解析:

    1、procedure 关键字是创建存储过程的命令。

    2、create [or replace] :如果存储过程已经存在则覆盖替代原有的过程。

    3、in|out :存储过程具有入参和出参两种参数选择,in表示的是入参,out表示的是出参,在使用过程的时候,入参必须得有对应的变量传入,出参得有对应的变量接收。

    4、datatype表示出入参变量对应的数据类型。

    5、is后面跟着的是过程当中使用到的声明变量。

    6、begin...end 中间编写的就是存储过程的具体操作。

    例子1、创建一个存储过程计算学生某一个课程中成绩在班中的排名,使用存储过程进行计算,返回对应的排名,代码如下:

    create or replace procedure sp_score_pm(
    p_in_stuid in varchar2,--学号
    p_in_courseid in  varchar2, --课程ID
    p_out_pm out number--排名
    )
    is
    ls_score number:=0;
    ls_pm number:=0;
    begin
      --获取该学生的成绩
      select t.score into ls_score from score t
       where t.stuid = p_in_stuid
         and t.courseid = p_in_courseid;
      --获取成绩比该学生高的人数
      select count(1) into ls_pm from score t
       where t.courseid = p_in_courseid
       and  t.score>ls_score;
       --得到该学生的成绩排名
       p_out_pm:=ls_pm+1;
    exception
      when no_data_found  then
         dbms_output.put_line('该学生的课程:'||p_in_courseid|| '的成绩在成绩表中找不到');
    end;

    通过上面的代码,我们可以直接在SQL窗口执行编译,编译成功后,我们就可以调用存储过程来获取学生对应的课程成绩排名了,存储过程需要出入参赋值,因此我们可以通过PL/SQL语句块进行测试,代码如下:

    declare
    ls_pm number;--排名
    begin
      --SC201801001
      sp_score_pm('SC201801001','R20180101',ls_pm);
      dbms_output.put_line('学号:SC201801001,课程号:R20180101 的成绩排名是:'||ls_pm);
      sp_score_pm('SC201801001','R20180102',ls_pm);
      dbms_output.put_line('学号:SC201801001,课程号:R20180102 的成绩排名是:'||ls_pm);
      --SC201801002
      sp_score_pm('SC201801002','R20180101',ls_pm);
      dbms_output.put_line('学号:SC201801002,课程号:R20180101 的成绩排名是:'||ls_pm);
      sp_score_pm('SC201801002','R20180102',ls_pm);
      dbms_output.put_line('学号:SC201801002,课程号:R20180102 的成绩排名是:'||ls_pm);
      
    end;

    结果如下:

    1.png

    推荐教程:《Oracle教程

    以上就是oracle存储过程的作用有哪些的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:oracle 存储过程
    上一篇:怎么查询oracle数据库字符集 下一篇:完全掌握Oracle进阶学习之查看执行计划
    PHP编程就业班

    相关文章推荐

    • 怎么清除oracle表空间• oracle怎么查询数据库的默认表空间• oracle中存储过程与函数的区别是什么• oracle中怎么创建存储过程• 什么是oracle游标• oracle中什么是表空间

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网