Oracle PL/SQL高级编程(第一弹:面向对象编程)

PL/SQL中对象的组成结构

PL/SQL中的对象类型是一种自定义的复合类型,与包的定义很相似,由两部分组成:
- 对象类型规范:是对象与应用的接口,用于定义对象的公用属性和方法。
- 对象类型体:用于实现对象类型规范所定义的公用方法。

在对象类型规范中定义对象属性时,必须要提供属性名和数据类型,对象类型属性可以使用多数Oracle数据类型,但是不能使用以下类型:
- LONG和LONG RAW
- ROWID和UROWID
- PL/SQL特定的类型,如BINARY_INTEGER、BOOLEAN、%TYPE、%ROWTYPE、REF CURSUR、RECORD等。

在定义对象类型的属性时,不能指定对象属性的默认值,也不能指定NOT NULL选项。

对象类型的方法有以下几种:
- 构造方法:该方法类似于Java语言中的构造函数,用来初始化一个对象类型并返回对象的实例。
- MEMBER方法:该方法允许对象的实例进行调用,在MENBER方法中可以访问对象实例的数据,通常称为实例方法或成员方法。
- STATIC方法:该方法可以直接在对象类型上进行调用,它用于在对象类型上执行全局操作,通常称为静态方法。
- MAP方法:用于在多个对象间排序的映射方法。
- ORDER方法:用于在两个对象实例间排序的排序方法。

定义对象类型

定义对象类型的语法比较复杂,选项比较多,所以我们直接来看代码来了解怎么定义一个对象。
首先来定义一个对象类型规范:

--定义对象类型规范employee_obj
CREATE OR REPLACE TYPE employee_obj AS OBJECT (
--定义对象类型属性
empno         NUMBER(4),
ename         VARCHAR2(20),
job           VARCHAR2(20),
sal           NUMBER(10,2),
comm          NUMBER(10,2),
deptno        NUMBER(4),
--定义对象类型方法
MEMBER PROCEDURE Change_sal(p_empno NUMBER,p_sal NUMBER),
MEMBER PROCEDURE Change_comm(p_empno NUMBER,p_comm NUMBER),
MEMBER PROCEDURE Change_deptno(p_empno NUMBER,p_deptno NUMBER),
MEMBER FUNCTION get_sal(p_empno NUMBER) RETURN NUMBER,
MEMBER FUNCTION get_comm(p_empno NUMBER) RETURN NUMBER,
MEMBER FUNCTION get_deptno(p_empno NUMBER) RETURN INTEGER
) NOT FINAL;      --指定该类可以被继承,如果指定FINAL,表示该类无法被继承

然后来定义对象体:

--定义对象类型体
CREATE OR REPLACE TYPE BODY employee_obj
AS
   MEMBER PROCEDURE change_sal (p_empno NUMBER, p_sal NUMBER)
   IS                          --定义对象成员方法,更改员工薪资
   BEGIN
      UPDATE emp
         SET sal = p_sal
       WHERE empno = p_empno;
   END;
   MEMBER PROCEDURE change_comm (p_empno NUMBER, p_comm NUMBER)
   IS                         --定义对象成员方法,更改员工提成
   BEGIN
      UPDATE emp
         SET comm = p_comm
       WHERE empno = p_empno;
   END;
   MEMBER PROCEDURE change_deptno (p_empno NUMBER, p_deptno NUMBER)
   IS                        --定义对象成员方法,更改员工部门
   BEGIN
      UPDATE emp
         SET deptno = p_deptno
       WHERE empno = p_empno;
   END;
   MEMBER FUNCTION get_sal (p_empno NUMBER)
      RETURN NUMBER
   IS                        --定义对象成员方法,获取员工薪资
      v_sal   NUMBER (10, 2);
   BEGIN
      SELECT sal
        INTO v_sal
        FROM emp
       WHERE empno = p_empno;
      RETURN v_sal;
   END;
   MEMBER FUNCTION get_comm (p_empno NUMBER)
      RETURN NUMBER
   IS                        --定义对象成员方法,获取员工提成
      v_comm   NUMBER (10, 2);
   BEGIN
      SELECT comm
        INTO v_comm
        FROM emp
       WHERE empno = p_empno;
      RETURN v_comm;
   END;
   MEMBER FUNCTION get_deptno (p_empno NUMBER)
      RETURN INTEGER
   
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值