ITPub博客

首页 > 数据库 > Oracle > WITH CHECK OPTION 在 INSERT INTO中的用法

WITH CHECK OPTION 在 INSERT INTO中的用法

Oracle 作者:wanghanjun 时间:2015-12-10 13:40:17 0 删除 编辑
这个问题是从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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: RAC to Single Instance
请登录后发表评论 登录
全部评论

注册时间:2014-05-28

  • 博文量
    42
  • 访问量
    48163