存储过程和函数

本文深入探讨了SQL中的子程序概念,包括存储过程、函数的定义、创建和调用方式,以及它们在数据库操作中的优势。通过实例展示了如何创建和使用存储过程与函数,以实现高效的数据管理和业务逻辑处理。


子程序
    子程序包含存储过程、函数以及触发器
    优点:模块化、可重用性、易维护、高效性(一次编译,多次使用,在内存中只加载一次)
    一 存储过程
     1.1 定义
         表示存储在服务器中执行的过程
     1.2 创建过程语法
create or replace PROCEDURE mypro
(  
   m_empno myemp.empno%TYPE,--默认为输入参数
   m_sal OUT myemp.sal%TYPE,--输出参数
   m_comm OUT myemp.sal%TYPE--输入输出参数
)
IS
    mysal myemp.sal%TYPE;--局部变量(作用域在该过程中)   
    mycomm myemp.comm%TYPE;
BEGIN
    SELECT sal,comm INTO mysal,mycomm FROM myemp WHERE empno = m_empno;       
    IF mysal > 3000 THEN
       mysal := mysal + 100;
    END IF;       
    m_sal := mysal;
    m_comm := mycomm;
END;
/
    1.3 调用过程
     1.3.1 在sql中调用 
           execute过程名称(参数列表)
            备注:如果过程没有参数,可以通过 过程名称()或者过程名称直接调用
            call 过程名称(参数列表)
     1.3.2 在sql/plus中调用
        例子
         DECLARE
  m_empno myemp.empno%TYPE := 7369;
   m_sal  myemp.sal%TYPE;
   m_comm  myemp.sal%TYPE;
BEGIN
   mypro(m_empno,m_sal,m_comm);  
END;
/
   二  函数
    2.1 定义
     专门完成复杂的业务运算过程,并返回运算结果(无法执行DML语句)
   2.2 创建函数语法  
     create or replace function 函数名
     (参数列表)--和过程的参数列表一样,可以有输入、输出、输入输出参数
     return 返回类型
     is
     begin
       运算过程:
       return 值
     end;
    
 例子
CREATE OR REPLACE FUNCTION f_addtest(
  add1 NUMBER,--不需要写参数长度
  add2 NUMBER
)
RETURN NUMBER
IS  
  total NUMBER;
BEGIN
  total := add1+ADD2; 
  dbms_output.put_line(total);
  RETURN total;
END;
/
   2.3 使用方法
    不能像过程一样,直接在sql中单独使用,函数返回的值必须用变量接受,
    2.3.1 在sql中使用
      select 函数(参数) from dual;
      select * from tableName where 函数(参数)>= ...将函数的返回值作条件查询
    2.3.2 在pl/sql中使用    
      定义一个类型和函数返回值一样的变量接收函数返回值
      total := 函数(参数)
     
      DECLARE
  total NUMBER(7,2);
  add1 NUMBER(7,2) := 2;
  add2 NUMBER(7,2) := 90; 
BEGIN
  total := f_addtest(1,2);
  dbms_output.put_line(total);
END;
/

注意:

函数可以直接在sql中执行,而过程只能单独调用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值