Oracle TYPE OBJECT详解(一)

2014-11-24 09:23:49 · 作者: · 浏览: 2
Oracle TYPE OBJECT详解
======================================================
最近在自学PL/SQL高级 编程,了解到对象类型(OBJECT TYPE)。
www.2cto.com
特意搜索了一下10G官方文档,下面不才基于此进行拓展:
=======================================================
1. 介绍
Object-oriented programming is especially suited for building reusable components and complex
applications.
尤其适合于构建可重用的部件和复杂的应用程序的面向对象的编程
www.2cto.com
In PL/SQL, object-oriented programming is based on object types.
在PL / SQL,面向对象的程序设计是基于对象类型。
They let you model real-world objects, separate interfaces and implementation details, and store
object-oriented data persistently in the database.
他们坚持让你模拟现实世界的对象,单独的接口和实现细节,面向对象的数据和存储在 数据库中。
2. PL / SQL的声明和初始化对象
对象的类型可以代表任何真实世界的实体。例如,一个对象的类型可以代表一个学生,银行帐户,电脑屏幕上
,合理数量,或数据结构,如队列,堆栈,或列表。
[sql]
CREATE OR REPLACE TYPE address_typ AS OBJECT (
street VARCHAR2(30),
city VARCHAR2(20),
state CHAR(2),
postal_code VARCHAR2(6)
);
[sql]
CREATE OR REPLACE TYPE employee_typ AS OBJECT(
employee_id NUMBER(6),
first_name VARCHAR2(20),
last_name VARCHAR2(25),
email VARCHAR2(25),
phone_number VARCHAR2(25),
hire_date DATE,
job_id VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
manager_id NUMBER(6),
department_id NUMBER(4),
address address_typ
MAP MEMBER FUNCTION get_idno RETURN NUMBER,
MEMBER PROCEDURE display_address(SELF IN OUT NOCOPY employee_typ)
);
--创建对象体
[sql]
CREATE TYPE BODY employee_typ AS
MAP MEMBER FUNCTION get_idno RETURN NUMBER IS
BEGIN
RETURN employee_id;
END;
MEMBER PROCEDURE display_address ( SELF IN OUT NOCOPY employee_typ ) IS
BEGIN
DBMS_OUTPUT.PUT_LINE(first_name || ' ' || last_name);
DBMS_OUTPUT.PUT_LINE(address.street);
DBMS_OUTPUT.PUT_LINE(address.city || ', ' || address.state || ' ' ||
address.postal_code);
END;
END;
--持久化对象
[sql]
CREATE TABLE employee_tab OF employee_typ;
CREATE TYPE emp_typ as table of employee_typ;
3. 在PL/SQL块中声明对象:
[sql]
DECLARE
emp employee_typ; -- emp is atomically null
BEGIN
-- call the constructor for employee_typ
emp := employee_typ(315, 'Francis', 'Logan', 'FLOGAN',
'555.777.2222', to_date('2012-12-24', 'yyyy-mm-dd'), 'SA_MAN', 11000, .15, 101, 110,
address_typ('376 Mission', 'San Francisco', 'CA', '94222'));
DBMS_OUTPUT.PUT_LINE(emp.first_name || ' ' || emp.last_name); -- display details
emp.display_address(); -- call object method to display details
END;
4. PL/SQL如何处理未初始化的对象:
[sql]
DECLARE
emp employee_typ; -- emp is atomically null
BEGIN
IF emp IS NULL THEN DBMS_OUTPUT.PUT_LINE('emp is NULL #1'); END IF;
IF emp.employee_id IS NULL THEN
DBMS_OUTPUT.PUT_LINE('emp.employe