Oracle 存储过程详解(procedure)

1 概述

1. 存储过程是什么:事先经过编译并存储在数据库中的一套 sql 语句

2. 存储过程的优点
   (1) 提高 sql 执行效率   :'预编译' 后存储于内存中,故使用时,无需再次编译
   (2) 减少 '网络流量(I/0)':减少 sql 与服务器之间的上下文交换
   (3) 提高系统的 '安全性'  :减少 sql 注入的危险、权限控制

3. 存储过程的缺点
   (1) 增加数据库服务器的 '负荷'

2 语法

2.1 创建

create or replace procedure schema.过程名(变量名 in|out 数据类型) 
is | as -- 此处 is 和 as 等同
   声明语句段;
begin
   执行语句段;
exception 
   异常处理语句段;
end 过程名;

示例:两数相除并输出结果

-- *****************************************************************
-- 功能说明:计算两数相除
-- 参数说明:	i_a      除数
--         	i_b      被除数
--         	o_result 结果 
--         	io_flag  程序执行标识
-- 创建时间:2021-03-16 yoyo
-- 最近更新:
-- *****************************************************************
create or replace procedure scott.p_procedure_demo(i_a      in number,
                                                   i_b      in number,
                                                   o_result out number,
                                                   io_flag  in out varchar2) is
  v_message varchar2(30) := '存储过程模板';
begin
  io_flag := 'Y';

  -- i_b = 0 时,可验证报错
  o_result := i_a / i_b;

  -- 格式调整  1/2 = .5 => 0.5
  o_result := regexp_replace(o_result, '^\.', '0.');
exception
  when others then
    io_flag := 'N';
    dbms_output.put_line(sqlcode || ', ' || sqlerrm);
    dbms_output.put_line(dbms_utility.format_error_backtrace);
end;
/

参数说明(in | out):默认 in,可省略

1. 无参数时: 不用带 '()'
   (1) scott.p_procedure_demo

2. 有参数时: '固定参数类型''动态参数类型'(推荐,不用考虑变量的数据类型) 
   (1) 仅有入参 in:默认,可以省略
       scott.p_procedure_demo(p_ename in varchar2)
       scott.p_procedure_demo(p_ename in scott.emp.ename%type)
       
   (2) 仅有出参 out:不可以省略
       scott.p_procedure_demo(p_ename out scott.emp.ename%type)

   (3) 既有入参 in,也有出参 out
       -- 多个参数时
       scott.p_procedure_demo(p_empno in scott.emp.empno%type,
                              p_ename out scott.emp.ename%type)
       -- 一个参数时:既是入参,也是出参
       scott.p_procedure_demo(p_empno in out scott.emp.empno%type)

2.2 调用

1. 在 pl/sql 中调用存储过程('任何情况均适用')
   declare
   begin
      procedure_name; -- 若有参,则加上 "()"
   end;

2. 在命令窗口(请注意:仅在 '无参''仅有入参' 时适用)
   exec procedure_name;
   execute procedure_name; -- exec 是 execute 的缩写

   call procedure_name;

   说明:execcall 的区别:
   (1) exec 只能在命令窗口执行
   (2) call 即可以在命令窗口执行又可以在 pl/sql 程序窗口中执行
       但必须有括号,即使没有参数

2.3 修改、删除

1. create or replace... -- 支持重复操作

2. drop procedure scott.p_procedure_demo; -- 删除

3 Debug

1. 选中过程名,'添加调试信息'
   -- 若已添加,则跳过此步骤(若没有,则不会进入该过程)
   
2. 选择 '测试',进入 '测试窗口'

3. 调试(Debug)

步骤1:任选一个过程名,‘添加调试信息’,若已勾选,则跳过
步骤2: 选择 ‘测试’,进入 '测试窗口’
在这里插入图片描述
步骤3:调试(Debug)
在这里插入图片描述

  • 20
    点赞
  • 148
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Oracle 存储过程是一种在 Oracle 数据库中创建的可重用代码块,它可以接收输入参数并生成输出参数,还可以执行 SQL 查询和 DML 操作(如插入、更新、删除)。存储过程可以被其他程序或存储过程调用,并且可以在数据库中进行存储和管理。 以下是一些关于 Oracle 存储过程的详细说明: 1. 存储过程的语法 存储过程的语法类似于 PL/SQL 的语法。以下是一个简单的例子: CREATE OR REPLACE PROCEDURE my_proc IS BEGIN -- 存储过程的代码 END; 存储过程可以包含输入参数、输出参数和异常处理部分。例如,下面是一个包含输入和输出参数的存储过程: CREATE OR REPLACE PROCEDURE my_proc( in_param1 IN VARCHAR2, in_param2 IN NUMBER, out_param OUT VARCHAR2 ) IS BEGIN -- 存储过程的代码 out_param := in_param1 || TO_CHAR(in_param2); END; 2. 存储过程的优点 存储过程的主要优点是可重用性和性能优化。由于存储过程可以被多个程序或存储过程调用,因此可以减少代码的重复性,提高代码的可读性和可维护性。此外,存储过程可以在数据库中进行编译和优化,因此可以提高查询和操作的性能。 3. 存储过程的使用场景 存储过程通常用于以下场景: - 执行复杂的查询和操作,例如联合查询、嵌套查询、分组查询等。 - 执行大量的 DML 操作,例如插入、更新、删除等。 - 提供可重用的代码块,例如计算、数据转换等。 - 与其他程序或存储过程进行交互,例如调用其他存储过程、触发器等。 4. 存储过程的管理 存储过程可以在 Oracle 数据库中进行存储和管理。可以使用 SQL Developer、SQL*Plus 或其他 Oracle 工具来创建、修改、删除和调用存储过程。此外,存储过程还可以与其他数据库对象(如表、视图、索引等)一起进行备份和恢复。 总之,Oracle 存储过程是一种非常有用的工具,它可以提高代码的可重用性和性能优化,并且可以在数据库中进行存储和管理。若有需要,可以在实际应用中灵活运用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼丸丶粗面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值