본문 바로가기

Oracle

[Error] Got minus one from a read call 문제 해결 이 문제도 여러가지 이유로 인해 발생하기 때문에 아래와 같은 방법으로 해결이 안 될 수도 있다. 리스너의 문제로 이런 에러가 발생한다면 리스너의 리스타트를 먼저 해보는 게 좋을 수도 있다. 여튼 여러가지 이유 중에 Connection이 살아 있어서 더 이상 접속할 수 없을 때 저런 에러가 나온다면 아래와 같은 방법으로 해결할 수 있다. 먼저 연결되어 있는 Connection을 보는 방법이다. SELECT s.status, s.* FROM v$session s 그럼 active, 나 inactive 상태인 것들이 나오는데 봐서 안 쓰는 것들은 수동으로 없애주면 된다. 없애는 방법은 아래와 같다. ALTER SYSTEM KILL SESSION 'session ID, 시리얼번호'; 이런 식으로 하나씩 킬해주는..
ojdbc를 통해 SESSIONTIMEZONE 사용할 때 문제( feat. timezone 에러 ) 거지같은 에러가 발생했다. Local 환경에서 ojdbc를 사용하여 SESSIONTIMEZONE을 가져오면 Timezone값을 정상적으로 가져오는데 반해, Server 환경에서 SESSIONTIMEZONE을 가져오면 +9가 아닌 0값을 가져오는 문제가 발생했다. 결론부터 얘기하자면, 사용하는 ojdbc14.jar 파일의 버전이 달랐던 것. 서버 환경에서는 9.0.2.0.0 버전의 ojdbc14.jar 파일이 설치되어 사용되었고 로컬 환경에서는 10.2.0.5.0 버전을 사용 중에 있었다. SESSIONTIMEZONE 함수를 사용하려면 9.x 버전 말고 10.x대 이상의 버전을 사용해야 할 것이다.어떤 식으로 문제가 발생하냐면.. 다음과 같은 코드를 9.x대의 ojdbc를 사용할 때, 10.x대의 ojdb..
[Oracle] translate 함수 사용 방법 replace 함수는 하나의 기준 값만을 가지고 값을 변경하지만 translate 함수는 여러 기준 값을 이용하여 값을 변경할 수 있다. 코드 샘플을 보면 딱 이해가 될 것이다. translate( 변경대상값, 변경기준값, 변경될값 ) translate( '001487573', '0123456789', '0123456789' ) 이렇게 사용하면 원래 숫자 '001487573'였지만 특수문자'001487573'으로 변경되어 리턴될 것이다.
[Query문] INSERT INTO SELECT 가~~~끔씩 문법 순서를 잊어먹어서 적어놓는 INSERT INTO SELECT 문. 간단하게 설명하자면 INSERT를 SELECT 해온 값으로 넣는 MERGE 다음으로 자주 쓰는 마법의 쿼리문이다. INSERT INTO INSERT_TABLE_NAME ( SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4 FROM SELECT_TABLE_NAME WHERE SID = 1 ); INSERT_TABLE_NAME : INSERT가 적용될, 실제 값이 들어갈 테이블명COLUMN1~4 : 가져올 데이터, 그리고 넣어줄 데이터가 될.SELECT_TABLE_NAME : 가져올 데이터가 있는 테이블명WHERE~ : WHERE절은 있어도 되고 없어도 되지만 테이블을 통째로 복사할 거 아니면 쓴다고..
[Oracle] 유저 테이블 목록 보기 SELECT TABLE_NAME FROM USER_TABLES; 아니면... SELECT TNAME FROM TAB;
[Oracle] Export / Import Oracle에서 Export와 Import를 하려면 사용하는 PC에 Oracle Server나 Oracle Client가 설치되어 있어야 한다.그래야 exp/imp 실행 파일이 있을 것이다. Exportexp USER_ID/PASSWORD@[SERVER_NAME] owner=OWNER_USER_ID file='FILE_PATH'대문자로만 쓰여진 부분은 Oracle 환경에 따라 바뀌거나 Export하려는 User, DB에 따라서 달라진다.USER_ID, PASSWORD : Oracle에 접속할 때 사용하는 아이디와 패스워드를 입력하면 된다. 참고로 해당 유저의 권한 중 Export 권한이 있어야 실행 가능하다.@[SERVER_NAME] : Default로 로컬에 설치된 오라클을 찾는다. 다른 DB에서 추출..
[Oracle] 제수가 0입니다. 문제 해결 SELECT 100 / 0 FROM DUAL 위처럼 분모가 0이 되는 상황에서 쿼리문을 실행하면 다음과 같은 에러가 뜬다. ORA-01476: 제수가 0 입니다. 당연한 거겠지만 동작하지 않는다. 그럼 어떻게 해결해야할까?다음과 같이 사용하면 된다. SELECT NVL( 100 / NULLIF( 0, 0 ), 0 ) FROM DUAL NULLIF를 사용하여 분모가 0이 될 때 NULL 변환하고, 산술처리를 넘긴 다음에 NVL을 이용하여 0으로 변환하여 사용하면 된다.아래는 NULLIF와 NVL의 사용법이다. NULLIF( expr1, expr2 ) expr1과 expr2의 값이 같을 때 NULL로 변환한다. NVL( expr1, expr2 ) expr1의 값이 NULL일 때 expr2으로 변환한다.
4중 LEFT OUTER JOIN... select m.AC_NO acNo, m.AC_TYPE acType, m.PROC_SID procSid, proc.NAME procName, proc.DESCRIPTION procDescription, proc.PROCESS_TIME processTime, p.PREV_AC_NO prevAcNo, n.NEXT_AC_NO nextAcNo from MW_BP_MAPP m LEFT OUTER JOIN MW_BP_MAPP_PREV p ON ( m.AC_NO=p.AC_NO ) LEFT OUTER JOIN MW_BP_MAPP_NEXT n ON ( m.AC_NO=n.AC_NO ) LEFT OUTER JOIN MW_PROC proc ON ( m.PROC_SID=proc.SID ) where BP_NO=61 심심해서 만..