这个问题是从OCA的12C的考试中来的 ,原题的知识点是如果使用WITH CHECK OPTION,并且给出了正确答案
1).创建 SEQ
CREATE
SEQUENCE HR.SEQ_EMP_ID START WITH 1000;
2).执行下列INSERT SQL
INSERT INTO ( SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,PHONE_NUMBER,EMAIL,HIRE_DATE,JOB_ID FROM HR.EMPLOYEES WITH CHECK OPTION WHERE PHONE_NUMBER BETWEEN '000.000.0000' and '999.999.9999' ) VALUES (HR.SEQ_EMP_ID.NEXTVAL,'&FNAME','&LNAME','&PHONENO','XXXX@XX.COM',SYSDATE,'MK_REP')
但是总会收到错误
SQL> INSERT INTO ( SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,PHONE_NUMBER,EMAIL,HIRE_DATE,JOB_ID FROM HR.EMPLOYEES WITH CHECK OPTION WHERE PHONE_NUMBER BETWEEN '000.000.0000' and '999.999.9999' ) VALUES (HR.SEQ_EMP_ID.NEXTVAL,'&FNAME','&LNAME','&PHONENO','XXXX@XX.COM',SYSDATE,'MK_REP');
Enter value for fname: HANK
Enter value for lname: WANG
Enter value for phoneno: 222.222.2222
old 1: INSERT INTO ( SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,PHONE_NUMBER,EMAIL,HIRE_DATE,JOB_ID FROM HR.EMPLOYEES WITH CHECK OPTION WHERE PHONE_NUMBER BETWEEN '000.000.0000' and '999.999.9999' ) VALUES (HR.SEQ_EMP_ID.NEXTVAL,'&FNAME','&LNAME','&PHONENO','XXXX@XX.COM',SYSDATE,'MK_REP')
new 1: INSERT INTO ( SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,PHONE_NUMBER,EMAIL,HIRE_DATE,JOB_ID FROM HR.EMPLOYEES WITH CHECK OPTION WHERE PHONE_NUMBER BETWEEN '000.000.0000' and '999.999.9999' ) VALUES (HR.SEQ_EMP_ID.NEXTVAL,'HANK','WANG','222.222.2222','XXXX@XX.COM',SYSDATE,'MK_REP')
INSERT INTO ( SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,PHONE_NUMBER,EMAIL,HIRE_DATE,JOB_ID FROM HR.EMPLOYEES WITH CHECK OPTION WHERE PHONE_NUMBER BETWEEN '000.000.0000' and '999.999.9999' ) VALUES (HR.SEQ_EMP_ID.NEXTVAL,'HANK','WANG','222.222.2222','XXXX@XX.COM',SYSDATE,'MK_REP')
*
ERROR at line 1:
ORA-00907: missing right parenthesis
之后参照了以下的文章,发现 WITCH CHECK OPTION应该放在WHERE条件的后面, 而不是之前
SQL> INSERT INTO ( SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,PHONE_NUMBER,EMAIL,HIRE_DATE,JOB_ID FROM HR.EMPLOYEES WHERE PHONE_NUMBER BETWEEN '000.000.0000' and '999.999.9999' WITH CHECK OPTION ) VALUES (HR.SEQ_EMP_ID.NEXTVAL,'&FNAME','&LNAME','&PHONENO','XXXX@XX.COM',SYSDATE,'MK_REP');
Enter value for fname: HANK
Enter value for lname: WANG
Enter value for phoneno: 222.222.2222
old 1: INSERT INTO ( SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,PHONE_NUMBER,EMAIL,HIRE_DATE,JOB_ID FROM HR.EMPLOYEES WHERE PHONE_NUMBER BETWEEN '000.000.0000' and '999.999.9999' WITH CHECK OPTION ) VALUES (HR.SEQ_EMP_ID.NEXTVAL,'&FNAME','&LNAME','&PHONENO','XXXX@XX.COM',SYSDATE,'MK_REP')
new 1: INSERT INTO ( SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,PHONE_NUMBER,EMAIL,HIRE_DATE,JOB_ID FROM HR.EMPLOYEES WHERE PHONE_NUMBER BETWEEN '000.000.0000' and '999.999.9999' WITH CHECK OPTION ) VALUES (HR.SEQ_EMP_ID.NEXTVAL,'HANK','WANG','222.222.2222','XXXX@XX.COM',SYSDATE,'MK_REP')
1 row created.
成功了,真心没想到连模拟题也会有错误,看来任何内容都需要自己亲自测试一边,否则就一直错下去了,而且这个语法也从来没用过开始以为是12C的新特性,后来发现11G也可以 ,看来还得加强学习
知识点来自: http://www.cnblogs.com/iImax/archive/2012/09/10/2678982.html
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8747612/viewspace-1869680/
,如需转载,请注明出处,否则将追究法律责任。