oracle8对象关系数据库内容摘要:

Jone 0510月 89 select ename , () days from employees e where empno=3。 EMPNAME DAYS king 45 使用别名  在 PL/SQL程序中,取得的对象实例必须被相同类型的对象变量接收。  例: declare emp employee_type。 begin select value(e) into emp from employees e where empno=1。 (500)。 end。 / PL/SQL中 对象方法的调用 PL/SQL中 对象方法的调用 DECLARE emp_variable employee_type。 days_employed number。 BEGIN SELECT VALUE( e ) INTO emp_variable FROM employees e WHERE = 3。 days_employed := ()。 (‘Days employed: ‘ || to_char(days_employed))。 END。 / 附 : PL/SQL输出与环境设置  执行结果: Days employed: 26  PL/SQL输出(利用包过程)  (‘…’)。  环境设置  exec  set serveroutput on 对象方法小结  对象类型总是有 1到多个方法(构造方法是隐含方法,成员方法为 0~n个。  成员方法可以带输入输出参数。  每个成员方法含有名为 SELF的隐含第一参数,它具有与对象类型自身相同的类型。  定义函数方法,如没参数不用写括号,但调用时要写括号。 定义方法形参时,类型不用写长度,如 varchar2 对象表的特性  对象表是只用对象类型定义的数据库表,不含关系型列。  对象表的列对应(用来创建表的)对象类型的属性。  对象表的行是表类型的对象 (实例 ),每一行都有一个系统分配的唯一的对象标识符( OID)  对象 ID(OID)是每一个行对象的唯一描述符 ,是全局唯一的 ,并且可以引用  OID不用于定位数据 , ROWID仍用于定位数据  oracle 通过对象引用实现数据库中不同对象之间的联系(与关系表完全不同) 获取 对象引用 — ref 函数  具有 OID的对象实例可以被引用 (REF)  ref(对象表的别名) 返回对象表实例指针,即行对象的 引用。  例: select ref(e) from employees e。 REF(e) 000028020965D...0BEFE0340800209ADC5901403BE50000 000028020965D...0BEFE0340800209ADC5901403BE50001 000028020965D...0BEFE0340800209ADC5901403BE50002 对象引用例  建立对象表 cust Create type cust_type as object ( custid number(5), name name_type, address address_type )。 create table cust of cust_type (custid primary key )。 对象引用例  向 cust表中插入数据 insert into cust values(1,name_type(39。 王 39。 ,39。 至远 39。 ), address_type(‘北京’ ,‘白颐路 5号’ ,100084) )。 insert into cust values(2,name_type(‘张’ ,‘大年 39。 ), address_type(39。 天津 39。 ,39。 康宁里 20号 39。 ,300072))。 insert into cust values(3,name_type(39。 赵 39。 ,39。 力平 39。 ), address_type(39。 上海 39。 ,39。 南京路 23号 39。 ,202092))。 对象引用例  查询 cust表 select * from cust where custid=1。 select , from cust c where =‘王’。  修改 cust 表结构 ??? alter table cust add(address1 address_type)。 不允许。 对象引用例  建立 goods_type CREATE TYPE goods_type AS OBJECT( gno NUMBER(3), gname varchar2(20), price number(6,2) )。 / CREATE TABLE goods OF goods_type ( constraint p1 primary key(gno))。 INSERT INTO goods VALUES(101,39。 电视机 39。 ,2900)。 INSERT INTO goods VALUES(102,39。 洗衣机 39。 ,1500)。 对象引用例 CREATE TYPE order_type AS OBJECT( orderid NUMBER(3), customer REF cust_type, orderdate DATE, qty NUMBER(5), gno NUMBER(3) )。 / CREATE TABLE orders OF order_type ( FOREIGN KEY (gno) REFERENCES goods(gno) )。 对象引用例 customer gno number orders 2 张大年 cust gno goods = 对象表 — 对象引用  REF是指向行对象的指针,易于实现表和表之间的联系,对象之间连接不再需要关系表的连接( JOIN) 操作。  将对象表的表别名作为 REF的参数 ,可以取得对应 OID的引用值。  引用只能用于具有 OID的对象。  customer REF cust_type SCOPE IS CUST SCOPE子句用于限定一个引用在一个指定表中,这样可以提高查询性能,并减少存储指针的空间。 INSERT INTO orders SELECT 1, ref(c), ‘71月 2020’ ,165, 101 FROM cust c WHERE custid=1。 UPDATE orders SET customer = ( SELECT REF( c ) FROM cust c WHERE custid = 2 ) WHERE orderid = 1。 引用类型数据的操作 引用类型数据的操作 SELECT customer FROM orders WHERE orderid = 1。 22020865F009D0AC262… 42A35E0340800… SELECT 顾客号 , 名 ,orderdate 日期 FROM orders o WHERE orderid = 1 顾客号 名 日期 2 大年 071月 00 对象引用 — 简化了代码  数据库管理对象间的连系 ,用户只需通过属性进行对象的引用。  在关系设计中 , 开发人员必须使用联接 (JOIN) SELECT name,address,... FROM orders o, cust c WHERE = and orderid =1。 deref函数  deref (ref指针)返回指针指向的对象本身  例: select deref(customer) from orders where orderid=1。 DEREF(CUSTOMER)(CUSTID, NAME(FIRST_NAME, LAST_NAME), ADDRESS(CITY, STREET, ZIP)) CUST_TYPE(2, NAME_TYPE(‘张’ , ‘大年’ ), ADDRESS_TYPE(‘天津’ , ‘康宁里 20号’ , 300072))  试比较: select deref(ref(c)) from cust c where custid=2。 和 select value(c) from cust c where custid=2。 SQL语句中的排序和比较  传统的数据类型主要为标量数据类型:  number, char,date  标量数据类型可以排序(如 order by …)  排序在 SQL语句的使用:  关系运算( = )  between 及 in 的判断  order by group by distinct 子句  unique 和 primary key 约束  自定义数据类型如何排序 select wname, address from worker order by address。 错误位于第 2行: ORA22950: 无法 ORDER 没有 MAP 或 ORDER 方法的对象 对象类型的排序方法  同类的排序对支持用户定义的对象类型很重要。  对象类型由于结构复杂 , 必须借助方法实现排序和比较。  MAP方法将对象类型转换为传统数据类型。  ORDER方法提供排序规则。 比较本对象和另一对象实例 , 并返回 1, 0, 1 分别代表 大于、等于、小于。  一个对象类型只能有一个 MAP方法或一个 ORDER方法:  map member function …  order member function… MAP 方法例  对象类型 标量类型  方法返回一个传统数据类型用于排序。  没有输入参数 (只有一个隐含参数 SELF)。  方法被隐含调用。  在类型定义中说明 MAP方法: CREATE TYPE name_type AS OBJECT ( first_name varchar2(4), last_name varchar2(4), MAP MEMBER FUNCTION name_map RETURN varchar2 )。  在类型体中实现 MAP方法: CREATE TYPE BODY name_type AS MAP MEMBER FUNCTION name_map RETURN varchar2 IS BEGIN RETURN first_name || last_name。 END。 END。  排序: SELECT custid , FROM cust c ORDER BY name desc。 任何基于 name_type类型的排序按名称的拼接串作为大小比较的依据。 MAP 方法例 MAP方法隐含调用 ORDER 方法  决定类型实例的序列关系。  有一个参数 (外加一个隐含的参数 SELF)  函数方法返回一个整数  如果。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。