`
king_tt
  • 浏览: 2109508 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle中对象表,ref及deref 对象表的使用

 
阅读更多

ORACLE在关系数据库外,融入了面向对象的元素,比如可以创建type,type之间可以继承,type可以带构造函数、排序函数、各种各样的成员函数、存储过程等等。

对象表是指该表的一行就是一个对象,有一个OID(object ID),对象表之间没有主外键关联的概念,为了体现这层关系,oracle中用了ref对象来实现。

下面例子,创建一个地址类型,一个人员类型,人员有地址属性,所以在人员类型中设置一个ref address来确定指向他所在地址的指针。

--创建地址类型

create type address as object(
street varchar2(35),
city varchar2(15),
state char(2),
zip_code integer
);

create table addresses of address; --创建地址对象表

--创建人员类型
create type person as object(
first_name varchar2(15),
last_name varchar2(15),
birthday date,
home_address ref address, --指向对应的地址,该地址应该在另外一个对象表中的一行
phone_number varchar2(15)
);

CREATE TABLE persons of person; --创建人员对象表

--插入一个地址

insert into addresses values(address('nanhai','shenzhen','gd','518054'));

insert into addresses values(address('shennan','shenzhen','gd','518057'));

--插入一个人员,注意这里的home_address部分是如何插入一个ref address的。
insert into persons values(person('shitou','haha',to_date('1982-07-05','yyyy-mm-dd'),
(select ref(a) from addresses a where street='nanhai'),
'1355555555'));

--也可以用下面的过程来插入一个人员记录

declare
addref ref address ;
begin
select ref(a) into addref from addresses a where street='nanhai';
insert into persons
values (person('shitou','haha',to_date('1982-07-05','yyyy-mm-dd'),
addref,'1355555555'));
commit;
end;

--查询某人的地址信息
select first_name,deref(home_address) from persons;

--修改地址
update persons set home_address=(select ref(a) from addresses a where street='shennan');

--删除某个人员

delete from persons where first_name='shitou';

--删除某个地址的相关人员记录
delete from persons where home_address=(select ref(a) from addresses a where street='nanhai');


分享到:
评论

相关推荐

    Oracle8i_9i数据库基础

    §15.4 在 PL/SQL 中使用 sqlcode,sqlerrm 273 第十六章 存储过程和函数 276 §16.1 引言 276 §16.2 存储过程 276 §16.2.1 创建过程 276 §16.2.2 使用过程 278 §16.2.3 开发存储过程步骤 279 §16.2.3.1 编辑...

    ref-napi:将Buffer实例转换为“指针”

    将对JavaScript对象的引用读/写到Buffer实例中 将Buffer实例的内存地址读/写到其他Buffer实例 读取/写入int64_t和uint64_t数据值(数字或字符串) 一种“类型”约定,以便您可以将缓冲区指定为int * ,并随意引用/...

    stable_deref_trait:取消引用到稳定地址的类型的不安全标记特征

    例如,如果编写自定义Vec类型,则可以实现StableDeref,然后用户将能够将自定义Vec类型与owning_ref和Rental一起使用。 可以通过禁用默认功能(特别是“ std”)来启用no_std支持。 在这种情况下,无法为上述std...

    result-object:TypeScript的结果对象

    结果对象一个简单的数据结构,可用于: 编写不依赖于向控制流抛出错误的异步代码,请参见:异步/等待对try / catch的过度使用必要时取消对异步数据结构(promises,observable等)的引用,请参见:功能性React组件中...

    stm-in-clojure:元循环 Clojure STM 实现

    我的目标是让这个 STM 实现让对 Clojure 感兴趣的人能够更好地理解它的 STM 原语( ref 、 deref 、 alter 、 dosync ),尤其是更高级的部分,比如通过commute交换更新和通过ensure防止写倾斜。 概述 MC-STM 用 ...

    converge:通过基于OpSets的CRDT上Clojure(Script)的收敛引用类型

    ref的当前值可以通过deref (或@ )照常使用,但是收敛的ref本身会打印为EDN并进行序列化以存储历史更改,例如Transit。用法( require '[converge.api :as convergent])( def c ( convergent/ref { :my :value })

    hexen-dll注入器:HEX-EN DLL注入器

    随时在您的开源项目中贡献和使用此代码。它是使用以下方法制成的: /屏幕截图*点击查看大图*前提条件或运行先决条件32bit / 64bit Windows操作系统入门需要使用node@^7或更高版本。 electronic-vue还正式推荐了管理...

    新手注入器3.5版本

    grabage_0.1_nk 提供最基础的采集功能,有经验的开发人员可以将其嵌入到系统模块中用于采集数据。 nk版本的内容检查不算完整,只能匹配部分发布时间,对于部分网页将

    aerospike-clj:Aerospike数据库的Clojure客户端

    Aerospike-clj 一个自以为是的Clojure库,包装了Aerospike Java Client。... 如果仍然需要同步行为,则调用代码仍可以deref ( @ )返回的将来对象。 为了进行更复杂的协调,可以直接使用Java的CompletableFuture AP

    rustprimer-v1.13-大家新年快乐.pdf

    Deref 与 Deref coercions Cow 及其在 String 和 &str; 上的应用 Send 和 Sync 并发,并行,多线程编程 线程 消息传递 共享内存 同步 并行 Unsafe、原始指针 Unsafe 原始指针 FFI rust调用ffi函数 将rust编译成库 ...

    sm-webapp:METASPACE Web应用程序的前端

    运行node deref_schema.js > src/assets/metadata_schema.json (FIXME:通过webpack进行操作) 在开发模式下运行 NODE_ENV=development nodemon server.js 服务器和客户端代码都更改后,这将用于热重装。 在生产...

    react-atom:受Clojure(Script)和agent.cljs启发,在React中管理状态的简单方法

    react-atom为全局应用程序状态和本地组件状态提供了一种非常简单的方法来管理React中的状态: :sparkles: Atom :sparkles: 。 将您的状态放在Atom : import { Atom } from "@dbeining/react-atom" ; const ...

    xarf:XARF-扩展的滥用情况报告格式

    xarf_bundled.schema.json 包括所有版本(超级模式) 所有模式定义在一个文件中仅包含内部参考小文件最适合大多数用例,当使用的工具足以理解复杂的内部引用(多跳)时xarf_deref.schema.json 包括所有版本(超级...

    shredder:垃圾收集了Rust的智能指针

    ) shredder具有以下功能: 安全:即时检测错误情况,并保护您免受未定义的行为的侵害人体工程学:无需手动管理根,只需一个常规的智能指针deref支持: DerefGc会为您提供垃圾回收,并在可能的情况下提供Deref智能...

    rusty-edge:夜间Rust通道+边缘出血特征

    提高Index / Deref特征的可用性,并让您利用重新借用语义的功能。 (RFC待定) 多参数索引: A[i, j]有效,并且只是A[(i, j)]之上的糖(RFC待定) 重载增强分配:例如,使用AddAssign特征重载表达式a += b 。 ...

    ki:Lisp + Mori,sweet.js

    有关更多信息,请参见或直接在浏览器中 。 ki是一个带有Clojure数据结构和语义的Lisp,可以在任何级别与Javascript代码混合使用。 ki是之上的薄宏层,外加一些构造。 ki不断变化,请随时进行测试,但会出现故障...

    reagent-cursor:试剂的可选游标库

    已弃用作为迁移到新的试剂项目组织的一部分,该游标库的早期版本被合并到 Reagent 的核心中。 作为 Reagent 0.5.0 版本的一部分,游标的实现已得到显着增强(在性能和泛化方面),因此应考虑弃用此独立游标库。 请...

    rust-membuf:一个安全的包装器,用于分配,重新分配和取消分配堆缓冲区

    MemBuf对该内存的实际内容不做任何保证,这取决于结构的用户,并且可以使用标准指针实用程序进行操作,该实用程序可以通过Deref的MemBuf的impl进行访问。 您可以将MemBuf视为Box<[T]>的近似值,其中不能保证元素...

    Taming Win32 Threads with Static Analysis - Slides (08161-yangjasonyue-slides)-计算机科学

    Center for Software Excellence (CSE)Microsoft CorporationCSE Program Analysis Group• Technologies– PREfix, SAL, ESP, EspX, EspC, …• Defect detection tools– Buffer overrun, Null deref, SQL ...

    Qt5.0.2_WinXP_SP3_modified_files.zip

    Change mkspecs\win32-msvc2005\qmake.conf: add -D_WIN32_WINNT=0x0503 -DWINVER=0x0503 -D__RPC__deref_out to QMAKE_CFLAGS; add /FORCE to QMAKE_LFLAGS I used the following options to run configure: -open...

Global site tag (gtag.js) - Google Analytics