OCP-1Z0-051-題目解析-第31題

31. Evaluate the following SQL commands: 
SQL>CREATE SEQUENCE ord_seq     
INCREMENT BY 10     
START WITH 120     
MAXVALUE 9999     
NOCYCLE; 

SQL>CREATE TABLE ord_items        
(ord_no NUMBER(4)DEFAULT ord_seq.NEXTVAL NOT NULL,         
item_no NUMBER(3),         
qty NUMBER(3) CHECK (qty BETWEEN 100 AND 200),    
expiry_date date CHECK (expiry_date > SYSDATE),         
CONSTRAINT it_pk PRIMARY KEY (ord_no,item_no),         
CONSTRAINT ord_fk FOREIGN KEY(ord_no) REFERENCES orders(ord_no)); 

The command to create a table fails. Identify the reason for the SQL statement failure? (Choose all that apply.) 
A. You cannot use SYSDATE in the condition of a CHECK constraint. 
B. You cannot use the BETWEEN clause in the condition of a CHECK constraint. 
C. You cannot use the NEXTVAL sequence value as a DEFAULT value for a column. 
D. You cannot use ORD_NO and ITEM_NO columns as a composite primary key because ORD_NO is also the FOREIGN KEY. 


Answer: AC


關於NextVal的使用限制

  • 在 CREATE TABLE 或 ALTER TABLE 語句中,在下列上下文中不能指定 NEXTVAL 或 CURRVAL:
    • 在 DEFAULT 子句中
    • 在檢查約束中。
  • 在 SELECT 語句中,下列上下文中不能指定 NEXTVAL 或 CURRVAL:
    • 使用 DISTINCT 關鍵字時在投影列表中。
    • 在 WHERE、GROUP BY 或 ORDER BY 子句中
    • 在子查詢中
    • 在 UNION 運算符結合 SELECT 語句時。
  • 在下列這些上下文中也不能指定 NEXTVAL 或 CURRVAL:
    • 在分段存儲表達式中
    • 在對另一個數據庫中的遠程序列對象的引用中。
A:sysdate不能用於check約束中(正確)
B:Between子句不能用於check約束中(錯誤)
C:NextVal不能用在Default中(正確)
D:ORD_NO and ITEM_NO不能被用作複合主鍵,因爲ORD_NO同時也是外檢(錯誤,一個字段可以同時被定義爲主鍵和外鍵)

這題只有C選項和上題不一樣,可以參考第30題,
Nextval和CurrVal的使用可以參考:http://blog.csdn.net/wjx515628/article/details/35781109#t0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章