[毎日1題]OCP 1 z 0-047:2013-08-28 DELETE..........................................................160
転載は出典を明記してください.http://blog.csdn.net/guoyjoe/article/details/10475707
ACDは問題ライブラリに基づいて、操作は以下の通りです:A答えは削除できます:
B答えは削除できません:このような文法はありません(DELETE*FROM、つまりDELETEの後で直接表名に付いて、*を使うことができません)
C答えは削除できます.
D答えも削除できます.
Dが削除できる原因を分析する:
1、ORDERS表に主キーがあるORDER_ID:CONSTRAINT "ORDER_PK"PRIMARY KEY ("ORDER_ID").
次の赤いフォントを見てください.
2、ORDER_TIEMSテーブルに外部キーORDER_がありますID:CONSTRAINT "ORDER_ITEMS_ORDER_ID_FK"FOREIGN KEY ("ORDER_ID")
REFERENCES"OE"."ORDERS"("ORDER_ID")ON DELETE CASCADE ENABLE NOVALLIDATE、メイン外部キーを付けてカスケード削除できます.
次の赤いフォントを見てください.
サブテーブルのレコードが削除されました:
この操作をシミュレートするとき、ずっと間違っている(ERROR at line 1:
ORA-01752:cannot delete from view without exactly one key-preserved table)理由は、自分が2つのテーブルorderとorderを作ったからです.itemsの場合、両テーブルに制約プライマリ外部キーは作成されず、プライマリ外部キーを追加してカスケード削除することができる(CONTRAINT「ORDER_ITEMS_ORDER_ID_FK」FOREGN KEY(「ORDER_ID」)REFERENCES「OE」.「ORDERS」(「ORDER_ID」)ON DELETE CASCADE ENABLE NOVALLIDATE).
これはもうテストしません.簡単すぎます.
QQ:252803295
学習交流QQ群:DSI&Core Search I群:127149411(技術:満タン)DSI&Core Search II群:177089463(技術:未満)DSI&Core Search Ⅲ群:284596437(技術:未満)DSI&Core Search IV群:192136702(技術:未満)DSI&Core Search V群:285030382(雑談:未満)
MAIL:[email protected]
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
ACDは問題ライブラリに基づいて、操作は以下の通りです:A答えは削除できます:
oe@OCM> delete from order_items 2 WHERE order_id IN (SELECT order_id FROM orders 3 WHERE order_status IN(0,1)); 110 rows deleted. oe@OCM> rollback; Rollback complete.
B答えは削除できません:このような文法はありません(DELETE*FROM、つまりDELETEの後で直接表名に付いて、*を使うことができません)
oe@OCM> DELETE * 2 FROM order_items 3 WHERE order_id IN(SELECT order_id 4 FROM orders 5 WHERE orders 6 WHERE order_status IN(0,1)); DELETE * * ERROR at line 1: ORA-00903: invalid table name
C答えは削除できます.
oe@OCM> delete from order_items i 2 WHERE order_id=(SELECT order_id FROM orders o 3 WHERE i.order_id=o.order_id AND 4 order_status IN(0,1)); 110 rows deleted. oe@OCM> rollback; Rollback complete.
D答えも削除できます.
oe@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.
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 255 NOCOMPRESS 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 NOVALLIDATE、メイン外部キーを付けてカスケード削除できます.
次の赤いフォントを見てください.
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 255 NOCOMPRESS 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(*) ---------- 105 oe@OCM> select count(*) from order_items; -- COUNT(*) ---------- 665 oe@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(*) ---------- 105 oe@OCM> select count(*) from order_items; -- 110 COUNT(*) ---------- 555
この操作をシミュレートするとき、ずっと間違っている(ERROR at line 1:
ORA-01752:cannot delete from view without exactly one key-preserved table)理由は、自分が2つのテーブルorderとorderを作ったからです.itemsの場合、両テーブルに制約プライマリ外部キーは作成されず、プライマリ外部キーを追加してカスケード削除することができる(CONTRAINT「ORDER_ITEMS_ORDER_ID_FK」FOREGN KEY(「ORDER_ID」)REFERENCES「OE」.「ORDERS」(「ORDER_ID」)ON DELETE CASCADE ENABLE NOVALLIDATE).
これはもうテストしません.簡単すぎます.
QQ:252803295
学習交流QQ群:DSI&Core Search I群:127149411(技術:満タン)DSI&Core Search II群:177089463(技術:未満)DSI&Core Search Ⅲ群:284596437(技術:未満)DSI&Core Search IV群:192136702(技術:未満)DSI&Core Search V群:285030382(雑談:未満)
MAIL:[email protected]
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