当前位置:   article > 正文

Oracle-存储过程_oracle存储过程

oracle存储过程

简介

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,它大大提高了SQL语句的功能和灵活性。存储过程编译后存储在数据库中,所以执行存储过程比执行存储过程中封装的SQL语句更有效率。

语法

 存储过程:
一组为了完成某种特定功能的sql语句集,
存储在数据库中,经过一次编译后,再次调用不需要再次编译.
用户通过存储过程的名字进行调用存储过程
优点:
效率高,安全性好,复用性强,可维护性高,不用传输大量的sql
存储过程,游标,视图的区别
在存储过程的语法中 可以使用as或is
在游标中只能使用is
在视图中只能使用as

定义语法:
create or replace procedure存储过程名(推荐proc_)
as |is
    --定义变量
begin
    --存储过程执行的语句
end;
调用语法:
call存储过程名();

示例

 无参无返回值

  1. -- 1.创建一个最简单的存储过程,只输出︰你好存储过程------(无参无返回值)--定义
  2. create or replace procedure proc_out_info
  3. as
  4. begin
  5. dbms_output.put_line('你好,存储过程');
  6. end;
  7. --调用
  8. call proc_out_info();--不可以省略
  9. 2.创建两个变量,在存储过程中输出这两个变量的值-李四,,成绩90 ---李四的数学成绩为90分
  10. --定义
  11. create or replace procedure proc_out_info_2
  12. is
  13. myname varchar2(50):='李四";
  14. score number;
  15. begin
  16. score: =90;
  17. dbms_output.put_line(mynamell'的数学成绩为'||scorell'');
  18. end;
  19. --调用
  20. call proc_out_info_2();

注意事项:1.如果存储过程没有输入参数及输出参数()可以不写
2.如果存储过程包含输入参数则必须要写(),
同时使用in来标明该参数为输入参数
存储过程名(参数名1 in参数类型1 ,参数名2 in参数类型2)

带参无返回

  1. --6查询根据部门编号统计该部门的员工人数并输出------带参无返回
  2. --select count(*) from emp where depid=3;
  3. --分析:因为不知都部门编号因此采用带一个输入参数的存储过程,
  4. --一个输入参数:类型number
  5. --定义
  6. create or replace procedure proc_emp_depid(dno in number )
  7. is
  8. num number : =0;
  9. begin
  10. select count(*) into numfrom emp
  11. where depid=dno;
  12. dbms_output.put_line( '部门编号为'l|dno||'的员工个数为'||num);
  13. end;
  14. --调用
  15. --查询部门编号为1的员工人数
  16. call proc_emp_depid(1);
  17. --查询部门编号为3的员工人数
  18. call proc_emp_depid(3);
  19. --查询部门编号为5的员工人数
  20. call proc_emp_depid(5);

 

  1. --7.根据学生姓名及学生性别查询符合条件的学生个数并输出
  2. --带几个输入参数,分别什么类型
  3. --姓名性别, varchar() char()
  4. --定义
  5. create or replace PROCEDURE proc_emp_name( sname in varchar2,ssex in char)
  6. is
  7. num number : =0;begin
  8. select count(*) into numfrom student
  9. where stuname like concat(concat( %' , sname), '%') and sex=ssex;
  10. dbms_output.put_line('学生个数为‘||num);
  11. end;
  12. --调用
  13. callproc_emp_name( '李", '0');

无参带返回值

  1. -- 类似 java 中 带有 返回值的调用
  2. -- 无参带返回值, out 输出参数, 存储过程的返回值
  3. create or replace procedure proc_lian_1(name out VARCHAR2)
  4. as
  5. begin
  6. name:='你好存储过程';
  7. end;
  8. --调用
  9. declare s VARCHAR2(50);
  10. begin
  11. proc_lian_1(s);
  12. dbms_output.put_line(s);
  13. end;

 带参带返回值

  1. --带参带返回值
  2. -- 定义输入输出参数的形式, 来实现, 根据 年级编号统计 学生的总数
  3. -- 年级编号 输入参数
  4. -- 学生总数 输出参数
  5. create or replace procedure proc_lian_1(gradeId in number,stucount out number)
  6. is
  7. begin
  8. select count(*) into stucount
  9. from student
  10. where gid=gradeId;
  11. end;
  12. -- 调用
  13. declare s number; gid number;
  14. begin
  15. gid:=2;
  16. proc_lian_1(gid,s); --调用存储过程
  17. dbms_output.put_line('年级编号为'||gid||'的学生人数为'||s); --输出结果
  18. end;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/733523
推荐阅读
相关标签
  

闽ICP备14008679号