1、12订货系统订货系统-对象关系的设计与实现对象关系的设计与实现l一、系统简介l二、采用关系方法l三、采用对象表l四、采用对象视图3一、系统简介一、系统简介l1.1 建模方法l1.2 系统涉及的实体和关系l1.3 实体包含的信息4l首先采用关系模型,实体联系模型实现,称为关系方法l然后使用UDTs将实体关系转换为模式对象,称为对象关系方法l数据源取自对象表,而非关系模型中的关系表l数据源使用关系表,而不是直接定义对象表,采用对象视图表示虚拟对象表1.1 建模方法建模方法51.2 系统涉及的实体和关系系统涉及的实体和关系Customer_InfoPurchase_OrderStock_InfoLi
2、ne_Itemsmn1mmn11顾客表,Customer_Info货物表,Stock_Info订货单,Purchase_Order6顾客信息顾客信息编编号号顾顾客客名名地地址址邮邮编编电电话话1电电话话2电电话话31Jean Nance2 Avocet Drive,Redwood Shores,CA95054415-555-12122John Nike323 CollegeDrive,Edison,NJ08820609-555-1212201-555-12127货物信息货物信息货货物物号号价价格格税税率率10046750.00210114500.23215342234.00215353456.
3、2328定货信息定货信息单单号号顾顾客客定定货货日日期期到到货货日日期期到到货货街街道道到到货货城城市市邮邮编编200121-1-9620-5-9810011条条目目编编号号单单号号货货物物数数量量折折扣扣01100115341200210011535101010200110041011200110112191.3 实体包含的信息实体包含的信息l顾客表:顾客联系信息l货物表:货物标识,价格l订货单:顾客,订货条目,发货日期,发货地址l订货条目清单:货物,数量,折扣有些实体属性很复杂:复合属性,如地址属性包括(省市,街道,邮编)一个顾客的电话可能有多部货物条目清单中应包含一个属性标识相应的订货单
4、10二、二、采用关系方法采用关系方法2.1 采用关系的解决方案2.2 关系表的定义方法2.3 对关系表的数据操纵112.1采用采用关系的解决方案关系的解决方案采用关系方法将顾客信息,订货单,货物条目清单组织成表将地址拆成为基本元素,如省市,街道,邮编设置一个可能拥有电话的最大限度,每一个电话表示为表的一列关系方法将订货条目从订货单中分离出来单独存放在一张表中,该表中有指向货物表和订货单表的外键122.2 表的定义表的定义l采用关系模型实现对现实世界的反映l将实体定义为关系(表)l实体间的联系通过外键或关系(表)来实现l表中的字段必须是不可分割的基本单位l不允许表中嵌表l多表联合实现查询13CR
5、EATE TABLE customer_info(custnoNUMBER PRIMARY KEY,custnameVARCHAR2(200),streetVARCHAR2(200),cityVARCHAR2(200),state VARCHAR2(2),zipVARCHAR2(6),phone1VARCHAR2(20),phone2VARCHAR2(20),phone3VARCHAR2(20);建立顾客表建立顾客表14建立货物表建立货物表CREATE TABLE stock_info(stocknoNUMBER PRIMARY KEY,price NUMBER tax_code NUMBER
6、);15CREATE TABLE purchase_order(ponoNUMBER PRIMARY KEY,custnoNUMBER REFERENCES customer_info,orderdateDATE,shiptodateDATE,shiptostreetVARCHAR2(200),shiptocityVARCHAR2(200),shiptostate VARCHAR2(2),shiptozipVARCHAR2(20);建立定货表建立定货表16建立定货表的详细条目建立定货表的详细条目CREATE TABLE line_items(lineitemno NUMBER,p o n o
7、N U M B E R R E F E R E N C E S purchase_order,stockno NUMBER REFERENCES stock_info,quantity NUMBER,discount NUMBERPRIMARY KEY(pono,lineitemno);17l向顾客表插入数据向顾客表插入数据INSERT INTO customer_info VALUES(1,Jean Nance,2 Avocet Drive,Redwood Shores,CA,95054,415-555-1212,NULL,NULL);INSERT INTO customer_info VA
8、LUES(2,John Nike,323 College Drive,Edison,NJ,08820,609-555-1212,201-555-1212,NULL);l向货物表插入数据向货物表插入数据INSERT INTO stock_info VALUES(1004,6750.00,2);INSERT INTO stock_info VALUES(1011,4500.23,2);INSERT INTO stock_info VALUES(1534,2234.00,2);INSERT INTO stock_info VALUES(1535,3456.23,2);2.3 数据操纵数据操纵-构造数
9、据182.3 数据操纵数据操纵-构造数据l向定货单表插入数据向定货单表插入数据 INSERT INTO purchase_order VALUES(1001,1,SYSDATE,10-MAY-1997,NULL,NULL,NULL,NULL);INSERT INTO purchase_order VALUES(2001,2,SYSDATE,20-MAY-1997,55 Madison Ave,Madison,WI,53715);l向定货单条目插入数据向定货单条目插入数据INSERT INTO line_items VALUES(01,1001,1534,12,0);INSERT INTO li
10、ne_items VALUES(02,1001,1535,10,10);INSERT INTO line_items VALUES(10,2001,1004,1,0);INSERT INTO line_items VALUES(11,2001,1011,2,1);19SELECT C.custno,C.custname,C.street,C.city,C.state,C.zip,C.phone1,C.phone2,C.phone3,P.pono,P.orderdate,L.stockno,L.lineitemno,L.quantity,L.discount FROM customer_info
11、 C,purchase_order P,line_items L WHERE C.custno=P.custno AND P.pono=L.pono AND P.pono=1001;2.3 数据操纵数据操纵-查询数据查询订货单1001的顾客信息和订货详细信息20每一个订货单的总价值SELECT P.pono,SUM(S.cost*L.quantity)FROM purchase_order P,line_items L,stock_info SWHERE P.pono=L.pono AND L.stockno=S.stockno GROUP BY P.pono;2.3 数据操纵数据操纵-查询数
12、据涉及货物1004 的订货单及订货条目信息SELECT P.pono,P.custno,L.stockno,L.lineitemno,L.quantity,L.discount FROM purchase_order P,line_items L WHERE P.pono=L.pono AND L.stockno=1004;21l更新数据:更改订货单1001,货物号为1535的订货量UPDATE line_items SET quantity=20 WHERE pono=1001 AND stockno=1535;l删除数据:删除订货单1001DELETE FROM line_items WH
13、ERE pono=1001;DELETE FROM purchase_order WHERE pono=1001;2.3 数据操纵数据操纵-维护数据22三、三、采用对象表采用对象表3.1 对象-关系解决方案3.2 定义类型3.3 定义方法3.4 创建对象表3.5 数据操纵233.1 对象对象-关系解决方案关系解决方案l3GL可以实现数据封装,复杂的用户定义类型(封装了方法)lSQL只能提供基本类型,无法封装对数据的相关操作l3GL语言很难实现数据的一致性和安全性l将复杂数据类型映射为SQL APP logic DATA logic24实现对象关系的方法实现对象关系的方法O-R方法lUDT使得复
14、杂数据结构进入数据库模式中l不将address拆散,也不将联系电话存为不相关的多列,在OR中可以定义特殊的类型表示l不将订货条目以单独表管理,OR中将他们作为相应订货表的嵌套表l在OR方法中,主要实体:顾客,货物,订货单变为对象l对象引用表示他们之间n:1的关系,收集类型作为多值属性25l有两种方法实现OR策略:创建对象表并装入数据使用对象视图表示已存在关系数据的虚拟对象表l采用对象表的O-R方法l采用对象视图的O-R方法实现对象关系的方法实现对象关系的方法26l查看属于用户的所有类型 用户字典 user_typesl查看某类型的详细定义desc 类型名3.2 定义类型定义类型273.2 定义
15、类型定义类型l定货系统中的类型地址 address_t :对象类型多个电话 phone_list_t:变长数组顾客 customer_info_t:对象类型货物 stock_info_t:对象类型货物条目 line_item_t:对象类型多个货物条目 line_item_list_t:嵌套表定货单 purchase_order_t:对象类型28定义一个对象类型表示地址信息CREATE TYPE address_t AS OBJECT(street VARCHAR2(200),city VARCHAR2(200),state CHAR(2),zip VARCHAR2(20);3.2 定义类型定义
16、类型29l定义一个数组类型(collection type)表示电话CREATE TYPE phone_list_t AS VARRAY(10)OF VARCHAR2(20);3.2 定义类型定义类型30定义一个对象类型表示顾客定义一个对象类型表示顾客CREATE TYPE customer_info_t AS OBJECT(custno NUMBER,custname VARCHAR2(200),address address_t,phone_list phone_list_t,ORDER MEMBER FUNCTION cust_order(x IN customer_info_t)RET
17、URN INTEGER,PRAGMA RESTRICT_REFERENCES(cust_order,WNDS,WNPS,RNPS,RNDS);3.2 定义类型定义类型31定义一个对象类型表示货物信息CREATE TYPE stock_info_t AS OBJECT(stockno NUMBER,cost NUMBER,tax_code NUMBER );3.2 定义类型定义类型32定义一个对象类型表示货物条目信息CREATE TYPE line_item_t AS OBJECT(lineitemno NUMBER,STOCKREF REF stock_info_t,quantity NUMB
18、ER,discount NUMBER );3.2 定义类型定义类型33定义一个嵌套表类型表示定货单中的所有货物条目信息 CREATE TYPE line_item_list_t AS TABLE OF line_item_t;3.2 定义类型定义类型34定义一个对象类型表示定货单定义一个对象类型表示定货单CREATE TYPE purchase_order_t AS OBJECT(pono NUMBER,custref REF customer_info_t,orderdate DATE,shipdate DATE,line_item_list line_item_list_t,shiptoa
19、ddr address_t,3.2 定义类型定义类型35MAP MEMBER FUNCTION ret_value RETURN NUMBER,PRAGMA RESTRICT_REFERENCES(ret_value,WNDS,WNPS,RNPS,RNDS),MEMBER FUNCTION total_value RETURN NUMBER,PRAGMA RESTRICT_REFERENCES (total_value,WNDS,WNPS);一个订货单(purchase_order_t)中包含一个订货条目(line_item_t)的清单(line_item_list),每一个订货条目包含一个对
20、于货物(stock_info_t)的引用(stockref)3.2 定义类型定义类型36嵌套表和VARRAY的比较(collection type)l对顾客中的电话来说VARRAY的元素是有序的VARRAY要求预置元素数目l对定货单中的货物条目来说嵌套表没有上界的限制嵌套表可以直接做查询可以对嵌套表做索引3.2 定义类型定义类型37定义定义customer_info_t对象类型的方法:对象类型的方法:CREATE OR REPLACE TYPE BODY customer_info_t AS ORDER MEMBER FUNCTION cust_order(x IN customer_info
21、_t)RETURN INTEGER IS BEGIN RETURN custno-x.custno;END;END;3.3 定义方法定义方法383.3 定义方法purchase_order_t对象类型的方法:对象类型的方法:CREATE OR REPLACE TYPE BODY purchase_order_t ASBEGIN MAP MEMBER FUNCTION ret_value RETURN NUMBER IS BEGIN RETURN pono;END;39MEMBER FUNCTION total_value RETURN NUMBER IS i INTEGER;stock sto
22、ck_info_t;line_item line_item_t;total NUMBER:=0;BEGIN FOR i IN 1.SELF.line_item_list.COUNT LOOP line_item:=SELF.line_item_list(i);SELECT DEREF(line_item.stockref)INTO stock FROM DUAL;total:=total+line_item.quantity*stock.price;END LOOP;RETURN total;END;END;3.3 定义方法定义方法40l SELF作为每一个函数的隐式参数,代表对象自身l CO
23、UNT给定嵌套表或数组中元素个数l DEREF操作符以一个引用为参数,返回一个行对象l显示错误信息 show errors;3.3 定义方法定义方法41l表是一个事物的表示,有一些特征和行为l也称为类(Class)或抽象数据类型(ADT)lOracle不使用这些术语l特征定义为对象属性,如员工对象的姓名、年龄、性别l行为定义为对象的方法,如员工工资的支付l对象是对象类型的一个实例l对象相当于关系表中的行和记录3.4 创建对象表创建对象表42一般来讲,可以按下面规则理解“对象”和“表”之间的关系:类,即客观世界的实体,对应于表对象属性对应于表的列对象对应于表的记录每一个表是一个隐式的类,它的对象
24、(记录)都有相同的属性(列)3.4 创建对象表创建对象表43定义对象表customer_info_tCREATE TABLE customer_tab OF customer_info_t(custno PRIMARY KEY);对象类型包含三个属性:custno NUMBERcustname VARCHAR2(200)address address_tphone_list phone_list_t3.4 创建对象表创建对象表44l抽象数据类型作为对象表的模板l约束用于表上,不能定义在类型上(如PRIMARY KEY的约束定义)l表可以包含对象列,由于变长数组phone_list_t包含的数量
25、少于10 x20,所以ORACLE将其作为一个存储单元,当超过4000byte时,将以BLOB类型存于表外l不为对象类型分配存储空间,仅为表分配记录空间3.4 创建对象表创建对象表45对象表stock_tab的定义:CREATE TABLE stock_tab OF stock_info_t(stockno PRIMARY KEY);STOCK_INFO_T对象类型包含三个属性:stockno NUMBER,cost NUMBER,tax_code NUMBER3.4 创建对象表创建对象表46对象表purchase_tab的定义:CREATE TABLE purchase_tab OF pur
26、chase_order_t(PRIMARY KEY(pono),SCOPE FOR(custref)IS customer_tab )NESTED TABLE line_item_list STORE AS po_line_tab;PURCHASE_ORDER_T对象类型的属性包括:pono NUMBER,custref REF customer_info_t,orderdate DATE,shipdate DATE,line_item_list line_item_list_t,shiptoaddr address_t3.4 创建对象表创建对象表47l REF操作符:操作符:如果未作限制,R
27、EF允许引用任意类型为customer_info_t表的行对象。SCOPE 约束只是限制purchase_tab对象表的custref列的取值范围。l 嵌套表:嵌套表:十分适合于表示表间的主从关系,从而可以避免DML中的关系联接(JOIN)。一个嵌套表的所有记录存储在一个独立的存储表中,在该存储表中有一个隐含的列NESTED_TABLE_ID与相应的父表记录相对应,在嵌套表中的记录与父表中的记录根据NESTED_TABLE_ID对应。嵌套表类型的各个属性对应于存储表的各列。3.4 创建对象表创建对象表48l修改对象表 ALTER TABLE po_line_tab ADD(SCOPE FOR(
28、stockref)IS stock_tab);ALTER TABLE po_line_tab STORAGE(NEXT 5K PCTINCREASE 5 MINEXTENTS 1 MAXEXTENTS 20);3.4 创建对象表创建对象表49插入stock_tab数据INSERT INTO stock_tab VALUES(1004,6750.00,2);INSERT INTO stock_tab VALUES(1011,4500.23,2);INSERT INTO stock_tab VALUES(1534,2234.00,2);INSERT INTO stock_tab VALUES(15
29、35,3456.23,2);3.5 数据操纵数据操纵-插入数据插入数据50插入customer_tab数据INSERT INTO customer_view VALUES(1,Jean Nance,address_t(2 Avocet Drive,Redwood Shores,CA,95054),phone_list_t(415-555-1212);INSERT INTO customer_tab VALUES(2,John Nike,address_t(323 College Drive,Edison,NJ,08820),phone_list_t(609-555-1212,201-555-1
30、212);3.5 数据操纵数据操纵-插入数据插入数据51插入purchase_tab数据INSERT INTO purchase_tab SELECT 1001,REF(C),SYSDATE,10-MAY-1997,line_item_list_t(),NULL FROM customer_tab C WHERE C.custno=1;上面的语句用下列属性创建了一个PURCHASE_ORDER_T对象:pono=1001 custref=对于顾客1的引用orderdate=SYSDATE shipdate=10-MAY-1997 line_item_list=一个空的货物列表 shiptoad
31、dr=NULL3.5 数据操纵数据操纵-插入数据插入数据52INSERT INTO THE(SELECT P.line_item_list FROM purchase_tab P WHERE P.pono=1001)SELECT 01,REF(S),12,0 FROM stock_tab S WHERE S.stockno=1534;3.5 数据操纵数据操纵-插入数据插入数据INSERT INTO THE(SELECT P.line_item_list FROM purchase_tab P WHERE P.pono=1001 )SELECT 02,REF(S),10,10 FROM stoc
32、k_tab S WHERE S.stockno=1535;向嵌套表插入数据:关键字THE53INSERT INTO purchase_tab SELECT 2001,REF(C),SYSDATE,20-MAY-1997,line_item_list_t(),address_t(55 Madison Ave,Madison,WI,53715)FROM customer_tab C WHERE C.custno=2;3.5 数据操纵数据操纵-插入数据插入数据54INSERT INTO THE(SELECT P.line_item_list FROM purchase_tab P WHERE P.p
33、ono=2001 )SELECT 10,REF(S),1,0 FROM stock_tab S WHERE S.stockno=1004;INSERT INTO THE(SELECT P.line_item_list FROM purchase_tab P WHERE P.pono=2001 )VALUES(line_item_t(11,NULL,2,1);3.5 数据操纵数据操纵-插入数据插入数据55UPDATE THE(SELECT P.line_item_list FROM purchase_tab P WHERE P.pono=2001 )plistSET plist.stockref
34、=(SELECT REF(S)FROM stock_tab S WHERE S.stockno=1011)WHERE plist.lineitemno=11;3.5 数据操纵数据操纵-更新数据更新数据56比较方法的引用SELECT p.pono FROM purchase_tab p ORDER BY VALUE(p);3.5 数据操纵数据操纵-查询数据查询数据57l 查询订货单1001的顾客信息和订货详细信息SELECT DEREF(p.custref),p.shiptoaddr,p.pono,p.orderdate,line_item_listFROM purchase_tab p WHE
35、RE p.pono=1001;l 每一个订货单的总价值SELECT p.pono,p.total_value()FROM purchase_tab p;3.5 数据操纵数据操纵-查询数据查询数据58l 涉及货物1004 的订货单及订货条目信息SELECT po.pono,po.custref.custno,CURSOR(SELECT *FROM TABLE(po.line_item_list)L WHERE L.stockref.stockno=1004)FROM purchase_tab po;3.5 数据操纵数据操纵-查询数据查询数据59在下面的删除例子中,Oracle自动删除所有属于订货
36、单的货物条目,而在关系模型中必须需要单独的两步来完成。删除订货单1001:DELETEFROM purchase_order WHERE pono=1001;3.5 数据操纵数据操纵-删除数据删除数据60四、采用对象视图四、采用对象视图4.1 对象视图解决方案4.2 定义对象视图4.3 使用触发器更新对 象视图4.4 数据操纵614.1 对象视图解决方案对象视图解决方案l对象视图是虚拟对象表,数据源取自表和视图l采用对象表设计方法实现系统设计一般采用如下步骤l建立实体和关系l通过创建和填充关系表实现实体关系结构l采用UDT表示对象关系模式,模型化一个实体关系结构l采用O-R模式创建和填充对象表
37、实现实体关系结构l采用对象视图方式要使用相同的初始步骤,但最后一步有所不同,它不是通过创建和填充对象表的方式,而是使用对象视图来表示虚拟对象表,数据取自一般的关系表624.2 定义对象视图定义对象视图l三个对象视图:Customer_view,Stock_view,Purchase_view。l创建对象视图的语句有四个部分:l视图的名字l视图所基于的对象类型的名字l基于主码创建对象标识l一个选择语句根据对应的对象类型向虚拟对象表中填充数据63Customer_view对象视图的实现:CREATE OR REPLACE VIEW customer_view OF customer_info_t
38、WITH OBJECT OID(custno)AS SELECT C.custno,C.custname,address_t(C.street,C.city,C.state,C.zip),phone_list_t(C.phone1,C.phone2,C.phone3)FROM customer_info C;4.2 定义对象视图定义对象视图64Stock_view对象视图的实现CREATE OR REPLACE VIEW stock_view OF stock_info_t WITH OBJECT OID(stockno)ASSELECT *FROM stock_info;4.2 定义对象视图
39、定义对象视图65Purchase_viewPurchase_view对象视图的实现:对象视图的实现:CREATE OR REPLACE VIEW purchase_view OF purchase_order_t WITH OBJECT OID(pono)AS SELECT P.pono,P.orderdate,P.shiptodate,address_t(P.shiptostreet,P.shiptocity,P.shiptostate,P.shiptozip)FROM purchase_order P;4.2 定义对象视图定义对象视图66CAST(MULTISET (SELECT line
40、_item_t(L.lineitemno,MAKE_REF(stock_view,L.stockno),L.quantity,L.discount)FROM line_items L WHERE L.pono=P.pono)AS line_item_list_t)MAKE_REF(customer_view,P.custno),4.2 定义对象视图定义对象视图67purchase_order_t对象类型有如下属性:pono NUMBER custref REF customer_info_t orderdate DATE shipdate DATE line_item_list line_it
41、em_list_t shiptoaddr address_t4.2 定义对象视图定义对象视图684.3 使用触发器更新对象视图使用触发器更新对象视图lOracle提供INSTEAD OF触发器作为更新复杂对象视图的方式lINSTEAD OF触发器对于更新前面定义的对象视图是必须的l每当想要改变对象视图中行对象的属性值时,Oracle执行对象视图的INSTEAD OF触发器l在触发器中,Oracle使用关键字:OLD和:NEW存取行对象的当前值和新值。69Stock_view的INSTEAD OF触发器CREATE OR REPLACE TRIGGER stockview_insert_tr I
42、NSTEAD OF INSERT ON stock_viewBEGIN INSERT INTO stock_info VALUES(:NEW.stockno,:NEW.cost,:NEW.tax_code);END;insert into stock_view values(1534,1000,10);insert into stock_info values(1534,1000,10);4.3 使用触发器更新对象视图使用触发器更新对象视图70Customer_view的INSTEAD OF触发器CREATE OR REPLACE TRIGGER custview_insert_tr INST
43、EAD OF INSERT ON customer_viewDECLARE phones phone_list_t;tphone1 customer_info.phone1%TYPE:=NULL;tphone2 customer_info.phone2%TYPE:=NULL;tphone3 customer_info.phone3%TYPE:=NULL;BEGIN phones:=:NEW.phone_list;4.3 使用触发器更新对象视图使用触发器更新对象视图71 IF phones.COUNT 2 THEN tphone3:=phones(3);END IF;IF phones.COUN
44、T 1 THEN tphone2:=phones(2);END IF;IF phones.COUNT 0 THEN tphone1:=phones(1);END IF;4.3 使用触发器更新对象视图使用触发器更新对象视图72 INSERT INTO customer_info VALUES (:NEW.custno,:NEW.custname,:NEW.address.street,:NEW.address.city,:NEW.address.state,:NEW.address.zip,/phones(1),phones(2),phones(3)tphone1,tphone2,tphone3
45、);END;INSERT INTO customer_view VALUES(1,Jean Nance,address_t(2 Avocet Drive,Redwood Shores,CA,95054),phone_list_t(415-555-1212);4.3 使用触发器更新对象视图使用触发器更新对象视图73Purchase_view的的INSTEAD OF触发器触发器CREATE OR REPLACE TRIGGERpoview_insert_tr INSTEAD OF INSERT ON purchase_viewDECLARE line_itms line_item_list_t;i
46、 INTEGER;custvar customer_info_t;stockvar stock_info_t;stockvartemp REF stock_info_t;BEGIN line_itms:=:NEW.line_item_list;SELECT DEREF(:NEW.custref)INTO custvar FROM DUAL;4.3 使用触发器更新对象视图使用触发器更新对象视图74/*向定货单表插入数据*/INSERT INTO purchase_order VALUES(:NEW.pono,custvar.custno,:NEW.orderdate,:NEW.shipdate,
47、:NEW.shiptoaddr.street,:NEW.shiptoaddr.city,:NEW.shiptoaddr.state,:NEW.shiptoaddr.zip);4.3 使用触发器更新对象视图使用触发器更新对象视图75/*向定货条目表插入数据向定货条目表插入数据*/FOR i IN 1.line_itms.COUNT LOOP stockvartemp:=line_itms(i).stockref;SELECT DEREF(stockvartemp)INTO stockvar FROM DUAL;INSERT INTO line_items VALUES (line_itms(i)
48、.lineitemno,:NEW.pono,stockvar.stockno,line_itms(i).quantity,line_itms(i).discount);END LOOP;END;4.3 使用触发器更新对象视图使用触发器更新对象视图764.4 数据操纵数据操纵下列语句激活了customer_view触发器:INSERT INTO customer_view VALUES(13,Ellan White,address_t(25 I Street,Memphis,TN,05456),phone_list_t(615-555-1212);77下列语句激活了下列语句激活了purchase
49、_view触发器:触发器:INSERT INTO purchase_view SELECT 3001,REF(c),SYSDATE,SYSDATE,CAST(MULTISET(SELECT line_item_t(41,REF(S),20,1)FROM stock_view S WHERE S.stockno=1535 )AS line_item_list_t),address_t(22 Nothingame Ave,Cockstown,AZ,44045)FROM customer_view c WHERE c.custno=14.4 数据操纵数据操纵781查询订货单1001的顾客信息和订货详
50、细信息SELECT DEREF(p.custref),p.shiptoaddr,p.pono,p.orderdate,line_item_list FROM purchase_view p WHERE p.pono=1001;2每一个订货单的总价值SELECT p.pono,p.total_value()FROM purchase_view p;4.4 数据操纵数据操纵-查询数据查询数据793涉及货物涉及货物1004 的订货单及订货条目信息的订货单及订货条目信息SELECT po.pono,po.custref.custno,CURSOR(SELECT *FROM TABLE(po.line_
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。