技术开发 频道

Oracle中的OOP概念

  【IT168 技术文档】

  Oracle 中的OOP概念:

  对象类型,可变数组,嵌套表,对象表,对象视图

  对象类型:

  优点:

  1) 更容易与Java, C++编写的对象应用程序交互

  2) 获取便捷。一次对象类型请求就可以从多个关系表中获取信息,通过一次网络往复即可返回

  语法:

  CREATE [OR REPLACE] TYPE type_name

  {{AS| IS } OBJECT | UNDER super_type}

  {

  attribute_name datatype[,attribute_name datatype]… ---成员变量

  [{MAP | ORDER} MEMBER function_name,] ---排序函数

  [{FINAL | NOT FINAL} MEMBER function_name,] ---可否继承的成员函数

  [{INSTANTIABLE | NOT INSTANTIABLE } MEMBER function_name,] ---可否实例化的成员函数

  [{MEMBER | STATIC } function_name,] ---静态、非静态成员函数

  }

  [{FINAL | NOT FINAL}] ---对象可否继承

  [{INSTANTIABLE | NOT INSTANTIABLE }] ---对象可否实例化

  /

  对象类型的主体部分(即函数的实现部分,可选的):

  CREATE [OR REPLACE]

  TYPE BODY type_name {AS| IS }

  [{MAP | ORDER} MEMBER function_body,] ---排序函数

  [{MEMBER | STATIC } function_name,] ---静态、非静态成员函数

  END;

  /

  例如:

  create or replace

  type person as object(

  first_name varchar2(100),

  last_name varchar2(100))

  /

  属性类型可以是任何oracle 数据类型(包括自定义),除了如下:

  LONG和LONG RAW

  NCHAR、NCLOB 、NVARCHAR2

  ROWID、UROWID

  PL/SQL的特定类型:%TYPE %ROWTYPE

  查看:

  Desc person

  构造函数:

  set serveroutput on

  declare

  l_person person

  begin

  l_person := person(‘Donny’,’Chen’);

  dbms_output.putline(l_person.first_name);

  end;

  /

  构造函数要接受对象类型的所有属性作为参数。因为这些参数没有默认值,即使是null,也要提供。

  举例:

  表中的对象类型:

  对象类型可以作为数据库中的列,所以称为列对象

  create table person_table

  (

  name person,

  age number)

  /

  set desc depth all

  desc person_table

  set desc depth 1

  插入数据:

  insert into person_table

  values(person(‘Donny’,’Chen’),30);

  declare

  l_person person

  begin

  l_person := person(‘Hua’,’Li’);

  insert into person_table values(l_person,33);

  end;

  /

  查询数据:

  select * from person_table

  访问对象类型的各个属性:

  select p.name.first_name

  from person_table p

  /

  为避免名称解析问题,要求查询对象类型的属性的时候,使用表别名。否则报错,举例:

  对象中的对象(合成):

  create or replace

  type employee as object(

  name person,

  empno number,

  hiredate date)

0
相关文章