📜  PL SQL-面向对象(1)

📅  最后修改于: 2023-12-03 15:03:47.157000             🧑  作者: Mango

PL/SQL-面向对象

什么是PL/SQL?

PL/SQL是Oracle数据库的编程语言,用于编写存储过程、触发器、函数等数据库程序,它结合了SQL语言和过程式语言的特点。

面向对象编程

PL/SQL也支持面向对象编程,这在数据库程序设计中很有用。

对象类型

PL/SQL中可以定义对象类型,代码如下:

CREATE OR REPLACE TYPE person_type AS OBJECT (
   id             NUMBER,
   name           VARCHAR2(50),
   birthdate      DATE,
   ADDRESS_TY     ADDRESS_TYPE
) NOT FINAL;

这里定义了一个人的类型,里面包含了id、name、birthdate和address。

对象表

PL/SQL中还可以定义对象表,也就是表格中的每一行都是对象类型。先定义一个地址类型:

CREATE TYPE address_type AS OBJECT(
  street  VARCHAR2(50),
  city    VARCHAR2(50),
  zip     VARCHAR2(10),
  state   VARCHAR2(20)
);

CREATE TYPE address_table_type AS TABLE OF address_type;

然后定义一个人员表类型:

CREATE TYPE person_table_type AS TABLE OF person_type;

使用这些自定义类型创建一个表格:

CREATE TABLE persons OF person_table_type;

这个表格中的每一行都是一个person_type类型,也就是说,可以定义一个表格,它的每一行都是一些自定义的类型。

构造函数

PL/SQL中还有构造函数这个概念,用于创建对象。以person_type为例:

CREATE OR REPLACE TYPE person_type AS OBJECT (
   id             NUMBER,
   name           VARCHAR2(50),
   birthdate      DATE,
   ADDRESS_TY     ADDRESS_TYPE,

   -- 构造函数
   CONSTRUCTOR FUNCTION person_type RETURN SELF AS RESULT 
);

这里定义了一个构造函数,名字和类型名一样,它返回类型本身。可以在里面赋值:

CREATE OR REPLACE TYPE BODY person_type AS 
   CONSTRUCTOR FUNCTION person_type RETURN SELF AS RESULT IS
   BEGIN
      self.id := 0;
      self.name := '';
      self.birthdate := SYSDATE;
      self.address_ty := address_type(NULL,NULL,NULL,NULL);
      RETURN;
   END;
END;

这里在person_type自己的代码块中定义了构造函数的实现,可以将一个类型初始化为默认值。

方法

PL/SQL中还支持方法这个概念,以person_type为例:

CREATE OR REPLACE TYPE person_type AS OBJECT (
   id             NUMBER,
   name           VARCHAR2(50),
   birthdate      DATE,
   ADDRESS_TY     ADDRESS_TYPE,

   -- 构造函数
   CONSTRUCTOR FUNCTION person_type RETURN SELF AS RESULT,
   
   -- 方法
   MEMBER FUNCTION get_age RETURN NUMBER,
   MEMBER FUNCTION get_name_length RETURN NUMBER
);

这里定义了两个方法,分别是计算年龄和名字长度。

然后实现这些方法:

CREATE OR REPLACE TYPE BODY person_type AS 
   -- 构造函数
   CONSTRUCTOR FUNCTION person_type RETURN SELF AS RESULT IS
   BEGIN
      self.id := 0;
      self.name := '';
      self.birthdate := SYSDATE;
      self.address_ty := address_type(NULL,NULL,NULL,NULL);
      RETURN;
   END;

   -- 方法
   MEMBER FUNCTION get_age RETURN NUMBER IS
   BEGIN
      RETURN TRUNC(MONTHS_BETWEEN(SYSDATE, self.birthdate) / 12);
   END;

   MEMBER FUNCTION get_name_length RETURN NUMBER IS
   BEGIN
      RETURN LENGTH(self.name);
   END;
END;
总结

PL/SQL支持面向对象编程,提供了自定义类型、表格、构造函数和方法等特性,这些特性方便了数据库程序的设计和编写。