`

Oracle中对象操作示例

阅读更多
select * from v$version;
/*
BANNER                                                                          
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production    
PL/SQL Release 11.2.0.1.0 - Production                                          
CORE 11.2.0.1.0 Production                                                        
TNS for 64-bit Windows: Version 11.2.0.1.0 - Production                         
NLSRTL Version 11.2.0.1.0 - Production  
*/

--创建对象
create or replace type employee_type as object
(
eno number(6),
name varchar2(10),
salary number(6,2),
job varchar2(10),
dno number(2),
member PROCEDURE change_job(new_job VARCHAR2),
member PROCEDURE change_salary(new_sal number),
member PROCEDURE change_dept(new_dno NUMBER),
member function get_sal return number,
constructor function employee_type(eno number,name VARCHAR2) return self as RESULT,
map MEMBER function sal_sort return number,
static function get_time return varchar2
);

--创建对对象体
create or replace type body employee_type as
  member PROCEDURE change_job(new_job VARCHAR2) is
  begin
    job:=new_job;
  end;
  member PROCEDURE change_salary(new_sal number) is
  begin
    salary:=new_sal;
  end;
  member PROCEDURE change_dept(new_dno NUMBER) is
  begin
    dno:=new_dno;
  end;
  member function get_sal return number is
  begin
    return salary;
  end;
  constructor function employee_type(eno number,name VARCHAR2) return self as RESULT is
  begin
    self.eno :=eno;
    self.name:=name;
    return ;
  end;
  map MEMBER function sal_sort return number is
  begin
    return salary;
  end;
  static function get_time return varchar2 is
  begin
    return to_char(sysdate,'yyyy-mm-dd hh24:mi:ss');
  end;
end;

--查看类型对象
desc employee_type

--使用静态对象示例
select employee_type.get_time() from dual;

--使用对象建表,对象作为行
create table t_employee_object of employee_type;

desc t_employee_object

insert into t_employee_object (eno,name) values (1111,'scott');
insert into t_employee_object values(employee_type(2222,'hr'));
commit;

select value(a) from t_employee_object a

--列对象,对象作为表的一个字段
create table t_employee_ex(
basic_info employee_type,
sex varchar2(6)
);

insert into t_employee_ex values(employee_type(3333,'wallimn'),'Male');

insert into t_employee_ex values(employee_type(1112,'smith',1000,'clerk',10),'Female');

update t_employee_ex a set a.basic_info.salary=2000 where a.basic_info.eno=3333;
commit;
select a.basic_info.eno eno, a.basic_info.name name,a.basic_info.salary salary from t_employee_ex a;

--此时这种查询就不支持了。
select value(a.basic_info),sex from t_employee_ex a;

--这个支持
select a.basic_info,sex from t_employee_ex a

--对象参照类型
create or replace type hm_type as object(
province varchar2(20),city varchar2(10),
street varchar2(20),doorplate varchar2(20),
name varchar2(10),
member function info return varchar2
);

create or replace type body hm_type as
member function info return varchar2
is
begin
  return name||':'||province||','||city||','||street||','||doorplate;
end;
end;

create table t_housemaster of hm_type;

insert into t_housemaster values('北京','北京','长安街','20号','张朋');
insert into t_housemaster values('上海','上海','外滩','20号','王胜');
commit;

select * from t_housemaster;

create table t_housemaster_ex(
id number(8) primary key,
name varchar2(10),
master ref hm_type);

insert into t_housemaster_ex select 1,'张朋',ref(a) from t_housemaster a where a.name='张朋';

select a.id,a.name,rawtohex(a.master) ,deref(a.master).info() mi from t_housemaster_ex a;
--master字段中仅存的是raw格式的地址。指向实际存储的内容所在的位置。

--更对参照类型所指的对象,再查查看。
update t_housemaster set street='23号' where name='张朋';
select a.id,a.name,deref(a.master).info() mi from t_housemaster_ex a;

--增加对象属性
alter type employee_type ADD ATTRIBUTE
remark varchar2(50) cascade;

--使用对象创建的表结构自动发生了变化
desc t_employee_object

--使用该对象定义的字段,也自动增加上了该属性。值为NULL
select a.basic_info.remark from t_employee_ex a;

select dump(a.basic_info) from t_employee_ex a;

select a.basic_info.eno ,a.basic_info.name from t_employee_ex a where a.basic_info.eno=3333;
分享到:
评论

相关推荐

    Java使用Jdbc连接Oracle执行简单查询操作示例

    Java使用Jdbc连接Oracle执行简单查询操作示例 Java使用Jdbc连接Oracle执行简单查询操作,是指使用Java语言通过Jdbc(Java Database Connectivity)连接Oracle数据库并执行简单查询操作的过程。本文将通过实例形式...

    Java操作Oracle示例

    本示例主要涉及Java通过JDBC(Java Database Connectivity)API操作Oracle数据库的基础知识。 1. **JDBC简介** JDBC是Java平台上的标准接口,它允许Java应用程序连接到各种类型的数据库,包括Oracle。JDBC提供了一...

    oracle-SpringBoot Oracle示例-Samples.zip

    标题中的"oracle-SpringBoot Oracle示例-Samples.zip"表明这是一个关于如何在SpringBoot应用中集成和使用Oracle数据库的示例代码集合。这个压缩包很可能包含了一系列Java代码、配置文件和其他必要的资源,用于演示...

    oracle基础教程vb示例

    在Oracle基础教程中结合VB示例,可以帮助开发者更好地理解如何使用VB与Oracle数据库进行交互。 本教程主要涵盖以下几个方面: 1. **Oracle数据库基础**:首先,你需要了解Oracle数据库的基本概念,如数据类型、表...

    oracle示例数据库OT_oracle数据库

    当你在新的Oracle环境中导入此脚本时,它会填充各种表和视图,提供用于练习查询、更新、删除和插入操作的数据。这包括可能的员工信息、销售记录、产品目录等模拟业务场景的数据,让学习者能够体验到实际数据库中的...

    vc 用ado访问Oracle数据库的代码示例 .rar_VC ORACLE_VC++ ado Oracle_ado ora

    本示例将深入探讨如何在VC++项目中利用ADO连接并操作Oracle数据库。 首先,我们需要确保已安装了Oracle客户端,包括必要的ODBC驱动程序,这通常是通过Oracle Instant Client实现的。安装后,可以在ODBC管理器中配置...

    oracle示例数据库OT,oracle示例数据库 hr,SQL源码.zip.zip

    这些示例数据库包含了各种各样的表、视图、存储过程和其他数据库对象,用于演示和学习Oracle的功能。 1. **Oracle示例数据库OT**: OT(Oracle Technology)示例数据库是一个包含了多种业务场景的数据集合,包括...

    oracle数据库对象导出脚本

    #### 标签:Oracle对象 这个标签进一步强调了文档的主要关注点是Oracle数据库中的各种对象。 ### 详细内容分析 #### 脚本前言 脚本开头部分首先设置了一些环境参数,这些参数决定了后续输出的格式和风格。例如:...

    这是一个开发oracle接口程序的示例源码

    在Oracle接口程序中,可能会遇到各种数据库操作异常,如连接失败、SQL执行错误等。这些异常应该被捕获并适当地处理,可以记录日志,提供用户反馈,或者尝试恢复操作。 此外,事务管理也是接口程序设计的重要考虑。...

    Oracle sql 源码 简单 全面 示例.rar

    Oracle SQL是一种强大的数据库查询语言,用于在Oracle数据库系统中检索、操作和管理数据。这个"Oracle SQL源码简单全面示例.rar"压缩包文件显然包含了各种Oracle SQL的使用示例,旨在帮助用户全面理解并掌握SQL在...

    oracle示例数据库OT,oracle示例数据库 hr,SQL

    2. `ot_schema.sql`: "schema"在Oracle中是指一个逻辑结构,包含了一组相关的对象,如表、视图、索引等。`ot_schema.sql`可能包含了创建这些对象的SQL语句,如CREATE TABLE、CREATE INDEX、CREATE VIEW等,这为我们...

    Java连接Oracle示例.rar

    在Java编程环境中,连接Oracle数据库是一...本示例中的代码可能包含这些步骤的实现,是学习和理解Java与Oracle数据库交互的一个良好起点。学习和掌握这些知识点,将有助于你更好地在实际项目中使用Java进行数据库开发。

    Oracle 示例方案 ----Mysql版数据脚本

    3. **对象关系模型**:在MySQL中实现Oracle的复杂表结构,如嵌套表、索引组织表和分区表。 4. **事务和并发控制**:虽然MySQL支持事务,但其ACID属性和Oracle的实现可能有所不同,学习如何在MySQL中处理并发和回滚。...

    oracle 教程与代码示例

    10. **安全性**:了解Oracle的角色、权限和对象权限管理,以及如何设置用户安全策略,防止未授权访问。 11. **数据库连接和客户端工具**:学习使用SQL*Plus和其他客户端工具(如Toad、SQL Developer等)与Oracle...

    在VB中利用OO4O技术操作Oracle中大对象的应用研究.pdf

    【标题】: "在VB中利用OO4O技术操作Oracle中大对象的应用研究" 【描述】: 这篇文章探讨了如何在Visual Basic(VB)环境中使用...通过掌握OO4O技术,可以更便捷地进行数据库中的大对象操作,提升应用程序的性能和效率。

    JSP Oracle 网上商店 示例

    在本示例中,JSP将用于处理用户请求,展示商品信息,以及管理用户交互。 2. **Oracle数据库** Oracle数据库以其高性能、高可用性和安全性著称,是许多大型企业级应用的首选。在建立网上商店时,我们需要存储商品...

    jsp连接oracle数据网上投票示例程序

    在这个示例中,Oracle用于存储投票选项、投票记录等信息。开发者需要了解SQL语句来创建表、插入数据、更新和查询信息。 3. **JDBC连接** Java Database Connectivity (JDBC)是Java平台的标准API,用于与各种数据库...

    JPublisher生成Oracle对象类型对应的Java对象例子

    这些示例可能包括如何创建Oracle对象类型,如何配置JPublisher,以及如何在Java代码中使用生成的类进行数据操作。通过阅读和运行这些示例,你可以更好地理解JPublisher的工作原理和实际应用。 通过这种方式,...

    易语言连接远程Oracle示例

    在本示例中,使用的可能是ADO接口,因为压缩包中的"ADODB2.fne"文件是ADO的相关组件。 "连接oracle例程.e"是易语言的源代码文件,其中包含了实现远程Oracle连接的代码。通常,这样的代码会包含以下步骤: 1. 引入...

Global site tag (gtag.js) - Google Analytics