본문 바로가기

DB/Oracle5

[Trouble Shooting] 오라클 '' 과 null SELECT * FROM test a LEFT JOIN example b ON a.ID = b.ID WHERE a.ID = 000000 AND b.flag = 'Y' AND NVL(a.ERROR_CODE, '') NOT in ('',' ','--'); 이런 쿼리가 있었는데 ERROR_CODE가 있음에도 불구하고 출력이 되지 않았다. 왜??? 오라클에서 길이가 없는 문자열(aka empty string, white space, blank)은 null 로 취급된다. 즉, 필드에 들어있는 값이나 '' 문자 또는 함수가 반환하는 값이 길이가 없는 문자열이라면 null 로 취급된다. 이러한 특징은 다른 DBMS 와 다르므로 주의해야 한다. SELECT NVL(null, '') FROM DUAL; // null 그.. 2020. 3. 3.
Oracle SQL Trace 확인하는 방법 Sql 문에 인덱스를 추가하고, 전 후 속도차이를 비교하기 위해 SQL Trace를 확인해보려고 했다. sqlplus에서 sysdba 계정으로 해야한다 SELECT P.SPID SERVER FROM V$PROCESS P, V$SESSION S WHERE P.ADDR = S.PADDR AND S.AUDSID = USERENV('SESSIONID'); 우선 위의 쿼리를 사용해서 SPID를 확인해야한다. 나중에 trc 파일을 떨구면 SPID 번호로 생성이된다. 어차피 최신 파일을 보면 되기 때문에 위 과정은 꼭 필요하진 않는 것 같다. alter session set events '10046 trace name context forever, level 1'; 트레이스의 레벨을 설정할 수 있다. 레벨이 높을 수.. 2019. 10. 30.
Oracle VARCHAR2 MAX값 구하기, 마지막 레코드 구하기 seq 테이블이 VARCHAR2 타입으로 구현되어 있었다. 그럼 MAX값을 가져오고 싶은데 어떻게 가져오지? 다행히 이런 경우에도 가져오는 방법이 있기는 했다. MAX(to_number(해당 컬럼 명)) from 테이블 명 group by 그룹 아이디. 이렇게 하면 MAX인 VARCHAR2 값을 뽑을 수 있다. 그렇다면 MAX인 레코드 전체를 구하고 싶으면 어떻게 할까? Oracle에서 제일 마지막 레코드를 구하는 쿼리문 # 사용방법 SELECT * FROM (SELECT * FROM 테이블명 WHERE 조건 AND 조건 ORDER BY 필드명 DESC) WHERE ROWNUM = 1 select * from (select max(to_number(seq)), reg_dt, reg_id,content f.. 2019. 5. 27.
오라클 DUAL 테이블 Dual 테이블 오라클 자체에서 제공되는 테이블 간단하게 함수를 이용해서 계산 결과값을 확인 할 때 사용하는 테이블 사용용도 사용자가 함수(계산)를 실행할 때 임시로 사용하는데 적합하다. 함수에 대한 쓰임을 알고 싶을 때 특정 테이블을 생성할 필요없이 dual 테이블을 이용해 함수의 값을 리턴 받을 수 있다. ex) SELECT 시퀀스.NEXTVAL FROM DUAL; SELECT SYSDATE FROM DUAL; SELECT CURRENT_DATE FROM DUAL; MERGE into 내부에서 사용 2019. 5. 14.
오라클 시퀀스 사용법(NEXTVAL, CURRVAL) 시퀀스 생성 CREATE SEQUENCE [시퀀스 이름] [START WITH 시작번호] - default 1 [INCREMENT BY 증가단위] - default 1 [MAXVALUE 최대값] - default 오라클 버전 최대값 [MINVALUE 최소값] - default 1 [CYCLE | NOCYCLE] [CACHE | NOCACHE] - default 20 이름 빼고는 생략가능 cycle - 시퀀스가 최대 값이 되었을 때 다시 시작값으로 돌아갈 것인지 cache - 시퀀스 값을 메모리에 할당할 것인지 시퀀스 수정 ALTER SEQUENCE [시퀀스 이름] START WITH는 수정 불가능 시퀀스 검색 `SELECT * FROM USER_SEQUENCES`; 이 쿼리를 사용하면 생성된 모든 시퀀스.. 2019. 5. 14.