您的位置:首页 > 数据库

[每日一题] OCP1z0-047 :2013-08-28   DELETE........................................................

2013-08-28 23:44 465 查看
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/10475707







正确答案:ACD

根据题库,操作如下:
 
A答案能删除:

oe@OCM> delete from order_items 2WHERE order_id IN (SELECT order_id FROM orders 3WHERE order_status IN(0,1));110 rows deleted.oe@OCM> rollback;Rollback complete.

B答案不能删除:没有这样的语法(DELETE * FROM,即DELETE后直接跟表名,而不能用*)

oe@OCM> DELETE *2FROM order_items 3WHERE order_id IN(SELECT order_id 4FROM orders 5WHERE orders 6WHERE order_status IN(0,1)); DELETE ** ERROR at line 1: ORA-00903: invalid table name

C答案能删除:

oe@OCM> delete from order_items i 2WHERE order_id=(SELECT order_id FROM orders o 3WHERE i.order_id=o.order_id AND 4order_status IN(0,1));110 rows deleted.oe@OCM> rollback;Rollback complete.

D答案也能删除:

oe@OCM> delete from(select * from order_items i,orders o 2WHERE i.order_id=o.order_id AND order_status in(0,1)); 110 rows deleted.

 分析D能删除的原因:

 1、ORDERS表有主键ORDER_ID:CONSTRAINT "ORDER_PK" PRIMARY KEY ("ORDER_ID")。
 看下面红色字体:
 
oe@OCM> select dbms_metadata.get_ddl('TABLE','ORDERS') from dual;DBMS_METADATA.GET_DDL('TABLE','ORDERS') --------------------------------------------------------------------------------CREATE TABLE "OE"."ORDERS"("ORDER_ID" NUMBER(12,0), "ORDER_DATE" TIMESTAMP (6) WITH LOCAL TIME ZONE CONSTRAINT "ORDER_DATE_NN" NOT NULL ENABLE, "ORDER_MODE" VARCHAR2(8), "CUSTOMER_ID" NUMBER(6,0) CONSTRAINT "ORDER_CUSTOMER_ID_NN" NOT NULL ENABLE, "ORDER_STATUS" NUMBER(2,0), "ORDER_TOTAL" NUMBER(8,2), "SALES_REP_ID" NUMBER(6,0), "PROMOTION_ID" NUMBER(6,0),CONSTRAINT "ORDER_MODE_LOV" CHECK (order_mode in ('direct','online')) ENABLE,CONSTRAINT "ORDER_TOTAL_MIN" CHECK (order_total >= 0) ENABLE,CONSTRAINT "ORDER_PK" PRIMARY KEY ("ORDER_ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS NOLOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "EXAMPLE"ENABLE,CONSTRAINT "ORDERS_SALES_REP_FK" FOREIGN KEY ("SALES_REP_ID") REFERENCES "HR"."EMPLOYEES" ("EMPLOYEE_ID") ON DELETE SET NULL ENABLE,CONSTRAINT "ORDERS_CUSTOMER_ID_FK" FOREIGN KEY ("CUSTOMER_ID") REFERENCES "OE"."CUSTOMERS" ("CUSTOMER_ID") ON DELETE SET NULL ENABLE) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255NOCOMPRESS NOLOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "EXAMPLE"


2、ORDER_TIEMS表有外键ORDER_ID:CONSTRAINT "ORDER_ITEMS_ORDER_ID_FK" FOREIGN KEY ("ORDER_ID")
REFERENCES "OE"."ORDERS" ("ORDER_ID") ON DELETE CASCADE ENABLE NOVALIDATE,并加上了主外键可以级联删除。
看下面红色字体:

oe@OCM> select dbms_metadata.get_ddl('TABLE','ORDER_ITEMS') from dual;DBMS_METADATA.GET_DDL('TABLE','ORDER_ITEMS') --------------------------------------------------------------------------------CREATE TABLE "OE"."ORDER_ITEMS"("ORDER_ID" NUMBER(12,0), "LINE_ITEM_ID" NUMBER(3,0) NOT NULL ENABLE, "PRODUCT_ID" NUMBER(6,0) NOT NULL ENABLE, "UNIT_PRICE" NUMBER(8,2), "QUANTITY" NUMBER(8,0),CONSTRAINT "ORDER_ITEMS_PK" PRIMARY KEY ("ORDER_ID", "LINE_ITEM_ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS NOLOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "EXAMPLE"ENABLE,CONSTRAINT "ORDER_ITEMS_ORDER_ID_FK" FOREIGN KEY ("ORDER_ID") REFERENCES "OE"."ORDERS" ("ORDER_ID") ON DELETE CASCADE ENABLE NOVALIDATE,CONSTRAINT "ORDER_ITEMS_PRODUCT_ID_FK" FOREIGN KEY ("PRODUCT_ID") REFERENCES "OE"."PRODUCT_INFORMATION" ("PRODUCT_ID") ENABLE) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255NOCOMPRESS NOLOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "EXAMPLE"


删除了子表上的记录:
  
oe@OCM> select count(*) from orders;    --主表COUNT(*) ----------105oe@OCM> select count(*) from order_items;  --子表COUNT(*) ----------665oe@OCM> delete from(select * from order_items i,orders o 2 WHERE i.order_id=o.order_id AND order_status in(0,1));110 rows deleted.oe@OCM> select count(*) from orders;   --记录没变COUNT(*) ----------105oe@OCM> select count(*) from order_items;  --记录少了110条COUNT(*) ----------555 


有些人D答案百思不得期解,模拟这个操作时一直报错(ERROR at line 1:
ORA-01752: cannot delete from view without exactly one key-preserved table)原因就在于自己去建了两个表order和order_items时没有在这两个表上建约束主外键,并且加上主外键可以级联删除(CONSTRAINT "ORDER_ITEMS_ORDER_ID_FK" FOREIGN KEY ("ORDER_ID") REFERENCES "OE"."ORDERS" ("ORDER_ID") ON DELETE CASCADE ENABLE NOVALIDATE)。
这个我就不再测试了,太简单了。

QQ:252803295
学习交流QQ群:
DSI&Core SearchⅠ 群:127149411(技术:已满)
DSI&Core SearchⅡ 群:177089463(技术:未满)
DSI&Core SearchⅢ 群:284596437(技术:未满)
DSI&Core SearchⅣ 群:192136702(技术:未满)
DSI&Core SearchⅤ 群:285030382(闲聊:未满)

MAIL:oracledba_cn@hotmail.com
BLOG: http://blog.csdn.net/guoyjoe
WEIBO:http://weibo.com/guoyJoe0218
ITPUB: http://www.itpub.net/space-uid-28460966.html
OCM: http://education.oracle.com/education/otn/YGuo.HTM
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 DELETE OCP1z0
相关文章推荐