2014년 2월 26일 수요일

[오라클팁,구로가산오라클교육,ORACLE TIP]inline view를 이용한 멀티테이블 삭제(key-reserved) DELETE문의 FROM절에 인라인뷰를 이용하여 여러테이블을 기술할 수 있는데 이 경우에는 키보전 테이블(key reserved table)의 데이터는 삭제되지 않는다. 아래예제를 통해 이해하자. SQL> create table a ( 2 seq number, 3 name varchar2(20)); 테이블이 생성되었습니다. SQL> create table b ( 2 seq number primary key, 3 name varchar2(20)); 테이블이 생성되었습니다. SQL> CREATE SEQUENCE seq_test; 시퀀스가 생성되었습니다. SQL> INSERT ALL 2 INTO a VALUES(seq_test.nextval, name01) 3 INTO b VALUES(seq_test.currval,name02) 4 SELECT 'aaa' AS name01 , 'bbb' AS name02 5 FROM DUAL 6 / 2 개의 행이 만들어졌습니다. SQL> INSERT ALL 2 INTO a VALUES(seq_test.nextval, name01) 3 INTO b VALUES(seq_test.currval,name02) 4 SELECT 'aaa' AS name01 , 'bbb' AS name02 5 FROM DUAL 6 / 2 개의 행이 만들어졌습니다. SQL> select * from a; SEQ NAME ---------- -------------------- 3 aaa 4 aaa SQL> select * from b; SEQ NAME ---------- -------------------- 3 bbb 4 bbb -- 키보전 테이블인 b는 삭제되지 않는다. SQL> DELETE FROM 2 (SELECT * 3 FROM a , b 4 WHERE a.seq = b.seq 5 ); 2 행이 삭제되었습니다. SQL> select * from a; 선택된 레코드가 없습니다. SQL> select * from b; SEQ NAME ---------- -------------------- 3 bbb 4 bbb 위 예문에서 두 테이블 a, b 둘다 primary key가 없다면 다음과 같은 오류가 발생한다. SQL> DELETE FROM 2 (SELECT * 3 FROM a , b 4 WHERE a.seq = b.seq 5 ); (SELECT * * 2행에 오류: ORA-01752: 뷰으로 부터 정확하게 하나의 키-보전된 테이블 없이 삭제할 수 없습니다 [출처] 오라클자바커뮤니티 - http://www.oraclejavanew.kr/bbs/board.php?bo_table=oracleTip&wr_id=733 자바 오라클/빅데이터 아이폰/안드로이드 닷넷/WPF 표준웹/HTML5 채용/취업무료교육 초보자코스 [기업100%환급]Spring ,MyBatis,Hibernate실무과정 총 5일 40시간 03-10 [기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 총 5일 40시간 03-17 Spring3.X, MyBatis, Hibernate실무과정 총 12일 36시간 03-03 자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 총 24일 72시간 03-14 [주말저녁]자바기초에서JSP,Servlet,Ajax,jQUERY,스프링,마이바티스,하이버네이트 총 18일 72시간 03-01 JAVA&WEB프레임워크실무과정 총 14일 98시간 03-08 Spring3.X, MyBatis, Hibernate실무과정 총 5일 35시간 03-09 자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 총 10일 70시간 03-22 [기업100%환급]PL/SQL,ORACLE HINT,TUNING 총 5일 40시간 03-03 [기업100%환급]SQL기초에서 Schema Object까지 총 5일 40시간 03-10 SQL초보에서실전전문가까지 총 18일 54시간 03-10 SQL초보에서실전전문가까지 총 8일 56시간 03-01 [주말저녁]SQL기초에서 Schema Object까지 총 10일 40시간 03-08

[오라클팁,구로가산오라클교육,ORACLE TIP]inline view를 이용한 멀티테이블 삭제(key-reserved)

DELETE문의 FROM절에 인라인뷰를 이용하여 여러테이블을 기술할 수 있는데 이 경우에는 키보전 테이블(key reserved table)의 데이터는 삭제되지 않는다.

아래예제를 통해 이해하자.

SQL> create table a (
  2  seq number,
  3  name varchar2(20));

테이블이 생성되었습니다.

SQL>  create table b (
  2  seq number primary key,
  3  name varchar2(20));

테이블이 생성되었습니다.

SQL> CREATE SEQUENCE seq_test;

시퀀스가 생성되었습니다.

SQL>  INSERT ALL
  2    INTO a VALUES(seq_test.nextval, name01)
  3    INTO b VALUES(seq_test.currval,name02)
  4    SELECT 'aaa' AS name01 , 'bbb' AS name02
  5    FROM DUAL
  6  /

2 개의 행이 만들어졌습니다.

SQL>  INSERT ALL
  2    INTO a VALUES(seq_test.nextval, name01)
  3    INTO b VALUES(seq_test.currval,name02)
  4    SELECT 'aaa' AS name01 , 'bbb' AS name02
  5    FROM DUAL
  6  /

2 개의 행이 만들어졌습니다.

SQL> select * from a;

      SEQ NAME
---------- --------------------
        3 aaa
        4 aaa

SQL> select * from b;

      SEQ NAME
---------- --------------------
        3 bbb
        4 bbb


-- 키보전 테이블인 b는 삭제되지 않는다.

SQL> DELETE FROM
  2            (SELECT *
  3              FROM a , b
  4              WHERE a.seq = b.seq
  5            );

2 행이 삭제되었습니다.

SQL> select * from a;

선택된 레코드가 없습니다.

SQL> select * from b;

      SEQ NAME
---------- --------------------
        3 bbb
        4 bbb



위 예문에서 두 테이블 a, b 둘다 primary key가 없다면 다음과 같은 오류가 발생한다.

SQL>  DELETE FROM
  2            (SELECT *
  3              FROM a , b
  4              WHERE a.seq = b.seq
  5            );
          (SELECT *
          *
2행에 오류:
ORA-01752: 뷰으로 부터 정확하게 하나의 키-보전된 테이블 없이 삭제할 수 없습니다 

댓글 없음:

댓글 쓰기