zoukankan      html  css  js  c++  java
  • oracle存储过程

     

    1、语法结构

    create [or replaceprocedure 过程名  --or replace 如果存储过程已经存在则覆盖替代原有的过程

    ( p1 in|out datatype,           ----入参和出参两种参数
      p2 in|out datatype,          ---datatype表示出入参变量对应的数据类型
      ...
      pn in|out datatype   
         
    is 
         
        ....--过程当中使用到的声明变量
     
        begin
         
        ....--存储过程的具体操作
     
        end;
     
    2、例子:调用存储过程来获取学生对应的课程成绩排名
    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;
     
    3、优点

    1、降低总体开发成本。存储过程把执行的业务逻辑PL/SQL块和多条SQL语句封装到存储过程,只需要调用写好的过程,获取想要的结果 。

    2、增加数据的独立性。它的作用和视图的作用类似,假如表的基础数据发生变化,我们只需要修改过程当中的代码,而不需要修改调用程序。 

    3、提高性能。 一个功能的开发可能需要多个SQL语句,多个PL/SQL程序块 ,使用存储过程,Oracle只需一次编译,随时可以调用。 如果直接把许多SQL语句写进程序当中,需要多次编译,多次连接数据库。

  • 相关阅读:
    新年来了,却似乎没有新年的迹象和心情
    XHTC最新进展
    有件事很是头疼
    完善中的HTML版ProcessBuilder
    20041114 Bindows
    想不到这么快就申请成功了,多年未曾体会的激动仿佛又重返我身了
    有人需要这样的HTML Menu组件吗?
    告知所有需要XHTC和ProcessBuilder的朋友
    醉里插花花莫笑,可怜人似春将老
    Flex创建一个UI component的全过程
  • 原文地址:https://www.cnblogs.com/karlz/p/14441811.html
Copyright © 2011-2022 走看看