📅  最后修改于: 2023-12-03 15:03:47.157000             🧑  作者: Mango
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支持面向对象编程,提供了自定义类型、表格、构造函数和方法等特性,这些特性方便了数据库程序的设计和编写。