`
touchmm
  • 浏览: 1039830 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

oracle中的对象及测试

 
阅读更多

 oracle8 发布的时候,数据库中就可以使用对象了,可以定义自己的类,也就是对象类型,和java里面的类相似,都可以包含构造函数,属性和方法。,对象类型有时候也成为用户自定义类型。以下是相关使用说明和测试:

 

/**/ /**/ /**/ /* *
 oracle对象实例及测试
*/

-- -(1)测试对象
create   or   replace  type PERSON  as  Object(
   name 
varchar2 ( 100 ),
   sex 
char ( 2 ),
   birth date,
   pwd 
varchar2 ( 32 ),
   member 
function  geName  return   varchar2
)
create   or   replace  type body PERSON   as  
 member 
function  geName  return   varchar   is  
 
begin
 
return  self.birth; -- self表示当前对象如同java里面的this
  end ;
end  ;

-- (2)在plsql中使用对象
declare
tuser person;
begin
  tuser :
=  person( ' joe2 ' , ' 01 ' ,sysdate, ' 123456 ' );
  dbms_output.put_line(tuser.geName);
-- 调用方法
end ;


-- -(3)在对象中使用构造函数,过程和静态属性和方法
/**/ /*
1  构造函数使用constructor声明
2  构造函数return self as result声明结尾, 
3  构造函数属性不需要定义长度 eg:varchar2
 static 不能用member声明
 sttatic 不能声明属性,只能声明function和procedure
 static 的方法和函数使用的时候直接用 对象类型.XX
*/

create   or   replace  type testm  as  OBJECT(
  name 
varchar2 ( 10 ),
  sex 
char ( 2 ), 
  constructor 
function  testm( -- 一个参数的构造函数
    p_name  varchar2
  ) 
return  self  as  result,
  
  constructor 
function  testm( -- 二个参数的构造函数
    p_name  varchar2 ,
    p_sex 
char
  ) 
return  self  as  result,
  member 
function  getSex  return   char ,
  static 
function  getSexByCode(code  in   char return   varchar2 ,
  member 
procedure  getSexCN ,
  static  
procedure  getSexCNByCode(code  in   char , str  out  varchar2 )
);
create   or   replace  type body testm  is
 constructor 
function  testm( -- 一个参数的构造函数
    p_name  varchar2
  ) 
return  self  as  result  is
 
begin
    self.name:
= p_name;
    
return ;
 
end  ;
   constructor 
function  testm( -- 一个参数的构造函数
    p_name  varchar2 ,
    p_sex 
char
  ) 
return  self  as  result  is
 
begin
    self.name:
= p_name;
    self.sex:
= p_sex;
    
return ;
 
end  ;
  member 
function  getSex  return   char   as
  
begin
     
return  self.sex;
   
end  getSex;
   member 
procedure  getSexCN   as
    
begin
      
if  self.sex = ' 01 '   then
        dbms_output.put_line(
' ' );
     
else
        dbms_output.put_line(
' ' );
      
end   if ;
    
end  getSexCN;
    static 
function  getSexByCode(code  in   char return   varchar2   as
    
begin
      
if  code = ' 01 '   then
        
return   ' ' ;
     elsif code 
= ' 02 '   then
        
return   ' ' ;
      
else   return   ' 中性 ' ;
      
end   if ;
    
end  getSexByCode;
    static  
procedure  getSexCNByCode(code  in   char , str  out  varchar2 as
    
begin
      
if  code = ' 01 '   then
        
str : =   ' ' ;
     elsif code 
= ' 02 '   then
        
str : =   ' ' ;
      
else   str : =   ' 中性 ' ;
      
end   if ;
     
end  getSexCNByCode;

end ;

-- 测试
declare
obj testm;
sexstr 
varchar2 ( 4 );
begin
  obj :
=  testm( ' 01 ' );
  dbms_output.put_line(obj.getSex);
  obj.getSexCN;
   dbms_output.put_line(testm.getSexByCode(
' 03 ' ));
   testm.getSexCNByCode(
' 03 ' ,sexstr);
   dbms_output.put_line(sexstr);
end ;
-- ------------------------------
--
(4)类型继承---------------------------
/**/ /**/ /**/ /*
 使用 under标示
 被继承的对象必须定义为 NOT FINAL
 如果类型仅仅作为超类,不被实例化(类似于java中的abstract)定义为:not instantiable
*/

create   or   replace  type PARENTOBJ  as  Object(
   name 
varchar2 ( 100 ),
   sex 
char ( 2 ),
   member 
function  geName  return   varchar2
NOT  FINAl;
create  type body PARENTOBJ  is
   member 
function  geName  return   varchar2   as
   
begin
    
return  self.name;
   
end ;
end ;
create   or   replace  type SUB_OBJ under PARENTOBJ(
 birth date
)
-- 测试
declare
obj SUB_OBJ;
begin
  obj :
=  SUB_OBJ( ' joe2 ' , ' 01 ' ,sysdate);
  dbms_output.put_line(obj.geName);
-- 调用继承的方法,和继承的属性
end ;
-- -------------------------------------
--
(5)重写------------------------------
/**/ /**/ /**/ /*
 重写方法和过程需要在声明和body里面声明为overriding
*/

create   or   replace  type SUB_OBJ2 under PARENTOBJ(
 birth date,
overriding member 
function  geName  return   varchar2 -- 重写父类的方法
)
create   or   replace  type body SUB_OBJ2  is
   member 
function  geName  return   varchar2   as
   
begin
    
return   ' 我的名字是: ' || self.name;
   
end ;
end ;
-- 测试
declare
obj SUB_OBJ2;
begin
  obj :
=  SUB_OBJ2( ' joe2 ' , ' 01 ' ,sysdate);
  dbms_output.put_line(obj.geName);
-- 调用继承的方法,和继承的属性
end ;
-- (6)使用对象定义表中的列----------
create   table  test00(
 tuser person,
 remark 
varchar2 ( 100 )


-- insert into test00 values(person('joe','01',sysdate,'123456'),/*参数个数必须够*/'remarkcontent');
--
select t.tuser.name  from test00 t;--必须使用表别名
--
delete from test00 t where t.tuser.name='joe';
--
--------------------------------------------
--
(7)使用对象定义整个表
create   table  testoo1  of  person;
-- insert into testoo1 values(person('joe2','01',sysdate,'123456'));
--
select t.*  from testoo1 t;
--
delete from testoo1 where name='joe';
--
----------------------------------------------
--
(8)对象引用,每一列都是目标表中的列的引用
create   table  testoo2(
   id 
number   primary   key ,
   tuesr ref person scope 
is  testoo1
)
-- insert into testoo2 values(1,(select ref(oo1) from testoo1 oo1 where oo1.name='joe'));
--
update testoo2 o2 set o2.tuesr=(select ref(oo1) from testoo1 oo1 where oo1.name='joe2') where o2.id=1
--
-----------------------------------------------

0
0
分享到:
评论

相关推荐

    Oracle 客户端JDBC连接测试工具

    Oracle客户端JDBC连接测试工具是一种实用程序,它允许开发者和系统管理员通过Java Database Connectivity (JDBC)接口测试与Oracle数据库的连接。这个工具通常包含在Oracle客户端安装中,或者可以作为一个独立的JAR...

    Oracle数据库大对象数据存取的两种实现方法及时间性能比较.pdf

    标题中的“Oracle数据库大对象数据存取的两种实现方法及时间性能比较”指的是在Oracle数据库中处理大对象(LOB)数据的两种不同方法,并对比它们的性能。Oracle数据库中的大对象数据通常指的是非结构化的数据,如...

    oracle 文档安装与测试

    在Oracle中,有许多关键的系统视图用于管理和监控数据库状态,例如: - **dba_users**: 显示所有数据库用户的详细信息,包括用户名、默认表空间、临时表空间等。 - **dba_segments**: 提供了表、索引等对象占用的...

    testOracle测试jdbc for Oracle

    在"testOracle测试jdbc for Oracle"的场景中,描述中的“一段简单的代码”很可能是用来验证Java应用程序通过JDBC连接Oracle数据库的能力。以下是一个基础的JDBC连接Oracle数据库的步骤: 1. 加载驱动:使用`Class....

    JAVA连接ORACLE数据库方法及测试

    // 声明数据库地址及驱动 private Connection conn = null; private String url = "jdbc:oracle:thin:@localhost:1521:ORCL"; private String driver = "oracle.jdbc.driver.OracleDriver"; private String ...

    oracle数据库测试sql文件.zip

    在Oracle中,SQL不仅可以执行基本的DML(Data Manipulation Language)语句,如SELECT、INSERT、UPDATE和DELETE,还能进行DDL(Data Definition Language)操作,用于创建、修改和删除数据库对象,如表、视图、索引...

    JDBC连接oracle数据库测试

    在这个测试中,每20秒执行一次连接,我们可以使用Java的ScheduledExecutorService来定时执行任务。创建一个Runnable任务,包含数据库连接、执行时间记录、执行耗时计算和结果记录的逻辑。然后将其提交给...

    一键编译指定Oracle用户的所有无效对象

    编译Oracle对象通常涉及调用`DBMS_UTILITY.COMPILE_SCHEMA`包,例如: ```sql BEGIN DBMS_UTILITY.COMPILE_SCHEMA(SCHEMA => 'YOUR_USER', REUSE_SETTINGS => TRUE); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT....

    oracle job实例 测试通过

    从给定的Oracle Job实例测试通过的描述与代码片段中,我们可以提炼出多个关于Oracle数据库管理、编程与作业调度的关键知识点。以下是对这些知识点的详细解释: ### 1. 创建序列(Sequence) 在Oracle数据库中,...

    Toad for Oracle 中文使用指南

    - **比较数据、对象及更多**:提供数据比较功能,帮助用户识别不同数据库之间的差异。 - **自动执行流程**:介绍如何使用 Automation Designer 自动执行常见任务,提高自动化程度。 #### 九、项目管理 - **项目...

    oracle 基础知识测试 及答案

    Oracle数据库是全球最广泛使用的...以上就是Oracle基础知识的一些关键点,这些内容可能会出现在"Oracle基础知识测试"中。通过学习和掌握这些知识,可以有效地管理和操作Oracle数据库,满足企业对数据存储和处理的需求。

    ORACLE 测试工具

    在IT行业中,数据库管理系统是至关重要的,而Oracle作为全球领先的关系型数据库系统,其测试工具的使用对于确保数据安全、性能优化以及系统稳定性至关重要。本文将深入探讨Oracle测试工具的相关知识点,结合“文献...

    用jdbc测试oracle连接

    在Java编程环境中,Oracle数据库是广泛使用的数据库管理系统之一。通过Java Database Connectivity (JDBC) API,我们可以编写程序来与Oracle数据库进行交互。本教程将详细讲解如何使用JDBC测试Oracle数据库的连接,...

    ORACLE数据库备份与恢复测试

    在实际测试中,我们可能会遇到模拟数据丢失、硬件故障、数据库损坏等情况,然后使用RMAN或SQL*Plus进行恢复。例如,恢复一个表空间可能涉及以下步骤: 1. 关闭数据库至NOMOUNT状态。 2. 使用RMAN的RESTORE命令恢复...

    修改oracle数据库用户名及密码

    Oracle 数据库用户名及密码修改...Oracle 数据库用户名及密码修改需要经过连接到数据库、找到需要修改的用户、修改用户名和密码、提交修改、测试连接、查看用户对象、查看当前连接用户、关闭数据库和启动数据库等步骤。

    Python连接oracle工具cx_Oracle官方文档

    在cx_Oracle版本6中,为对象类型提供了更多的支持,并且介绍了对象类型相关的对象、高级队列选项以及消息属性等。 对于希望了解cx_Oracle版本历史的用户,官方文档也提供了详细的发布说明。例如,cx_Oracle 6.0版本...

    delphi连接oracle(免装oracle客户端)测试

    在IT行业中,Delphi是一种流行的面向对象的编程环境,它基于Pascal语言并以其高效的编译器和直观的集成开发环境(IDE)而闻名。Oracle则是一款强大的关系型数据库管理系统,广泛应用于大型企业级应用。当开发Delphi...

    oracle插入几千几万条测试实例

    根据提供的标题、描述、标签及部分内容,我们可以总结出以下关于Oracle数据库批量插入测试数据的知识点: ### 一、Oracle批量插入测试数据的目的 在进行软件开发或系统测试时,经常需要大量的测试数据来验证系统的...

Global site tag (gtag.js) - Google Analytics