본문 바로가기

데이터베이스/Oracle

(12)
IN과 NOT IN의 함정 1. IN 의 함정-hobby가 null 이거나 '낚시'인 경우를 in을 이용하여 표현하면 다음과 같다. hobby in ( null, '낚시') hobby가 null 이거나 '낚시'인 row들이 선택될 것이라 기대하지만, 결과는 '낚시'인 경우만 선택된다. 왜일까? 위 query를 where문으로 풀어보면 다음과 같다. where hobby = nullor hobby = '낚시' null은 is null 이나 is not null 로 비교되어야 하는데 hobby = null로 비교되었다. 따라서 hobby = null 은 false만 반환하므로 hobby = '낚시' 인 row만 선택되는 것이다. 2. NOT IN 의 함정- hobby가 null 또는 '낚시' 모두에 속하지 않는 경우를 not in을 ..
외부 sql파일 실행시키기 @경로\파일.sql:파일로 저장한 sql쿼리 스크립트를 실행시킴 쿼리 실행 후 temp 테이블이 만들어진 것을 확인할 수 있다.
다른 DB 서버의 테이블에 있는 데이터를 우리 DB 서버로 가져오기 1. 얻어 오고자하는 데이터를 갖고 있는 다른 DB의 서버에 접속한 후, 아래 그림과 같이select문을 이용하여 우리 DB 테이블에 값을 넣을 insert into 문을 만든후 쿼리를 실행한다. 2. 그러면 다음과 같은 쿼리 결과를 얻는다. 3. 그러면 위의 쿼리 결과들을 모두 긁어서 우리의 DB서버쪽 워크시트에 붙여준 후 모든 쿼리를 실행 시켜준다. 4. 그러면 다음과 같은 쿼리 결과( 테이블에 값 넣기 성공)를 볼 수 있다. 5. 이후, 다음과 같이 우리쪽 서버의 DB에 있는 사용자 user16의 테이블 tbl_store의 모든 row들을 출력해보면 다른 서버의 DB에 있는 사용자 team5의 테이블 tbl_store에 있는 모든 row들이 삽입된 것을 확인할 수 있다.
Sequence의 이해 및 활용 간단히 말해서 한 table의 primary key를 지정해주기 위해 시퀀스를 만들어줄 때 사용한다. 이때 한 가지 알아둘 것이 시퀀스의 currval 과 nextval 이다.시퀀스를 생성한 후 한번 nextval을 해주지 않으면 currval을 호출해도 값이 나오지 않고 에러가 발생한다.왜냐하면 자기 세션에 시퀀스 정보가 없기 때문이다.서버에서 받아오는 건 nextval이고 currval은 자신의 메모리에 올라온 것만 보여주게 된다.그래서 nextval을 해서 서버에서 시퀀스 값을 먼저 가져와야 currval을 호출하여 현재 시퀀스 값을 받아올 수 있다. 출처 : http://www.gurubee.net/lecture/1037