본문 바로가기
반응형

Oracle38

오라클 DBLINK 하면 ORA-01017: invalid username/password; logon denied 오류 충격적인 걸 알려주마.. 뭐 알고 있다면 아주 간단한 문제겠지만 모르면 정말 황당하다 못 해 짜증이 날 만한 문제. 오라클 9i에서 11g로 DBLINK를 걸때 이런 문제가 발생해요. 기존에 쓰던 DBLINK가 있습니다. 상대방 시스템이 업그레이드 되면서 버전업이 되었지요. IP는 변경됐지만 기존에 쓰던 DB 계정의 패스워드는 그대로 입니다. tnsping 때려 보면 아주 잘 날아 갑니다. DBLINK를 생성할때도 아주 잘 생성 됩니다. sqlplus로 붙어도 매우 잘 붙습니다. 근데 막상 DBLINK를 사용 하려고 하면 이런 오류를 뱉어 냅니다. > select * tab@test_dblink ORA-01017: invalid username/password; logon denied ....??? 이게.. 2011. 9. 18.
MERGE INTO 를 사용해 봅시다. 테이블을 조회해서 해당 조건으로 데이터가 존재하면 업데이트 하고 없으면 쑤셔 넣는다는 똑똑한 녀석이다. 실제 쿼리문에서 테이블명이랑 컬럼명만 임의로 막 변경한 거라서 대충 흐름만 보도록 하자. 잘 보다보니 이 놈을 이용해서 시퀀스 넘버도 가져와서 넣을 수 있다. 좋다. ON 부분에는 다중 조건을 쓸 수 있다. UPDATE나 INSERT를 할때 USING 문에서 뽑아온 값으로 넣을 수도 있다. MERGE INTO seq_table f USING ( select col1, col2, col3, col4, col5 , (select max(sqno) + 1 from seq_table x where t.col1 = x.col1 and t.col2 = x.col2 ) as seqno from base_table .. 2010. 9. 17.
distinct 때메 생긴 그지같은 오라클 쿼리 에러 -_- select 절에 컬럼 하나를 더 가져오게 변경을 했다. 그랬더니 이런 에러가 뜬다... ORA-01791: SELECT 식이 부적합합니다 .... 어쩌라고 -_- 참 난감하고도 난감한 에러다. 조회 컬럼을 distinct를 제외하고 * 로 바꾸니까 order by 절에 태클을 건다.. 음.. 근데 이상하군. 테이블의 컬럼이 아닌 별칭을 걸어 논 것이 었다.. 그렇군. 각설하고 결론은 distinct를 사용 했을 경우 order by 절에 기술된 컬럼이 select 절에 나와야 한다는 것이더라. 만약에 별칭을 사용 했다면 그 별칭을 order by 절에 써 주면 된다. 끝!!! .. 야심한 밤에 이게 뭔 짓이야.. 아.. 슬프다 -_- 2010. 8. 27.
거지같은 CLOB 이랑 안면 트기... VARCHAR2 타입은 최대 길이가 4000byte 로 정해져 있다. 데이터가 4000바이트가 넘어가면 에러를 뱉어 낸다. 그런데 데이터라는 것이 4000 바이트로 성이 찰 리가 없다. 그래서 생겨난것이 CLOB 타입 인데... 4000 바이트를 넘어가니까 어쩔 수 없이 CLOB을 쓰긴 써야 되는데 이놈이 여간 거지 같은게 아니다. CLOB은 다른 애들이랑 어울리길 거부한다. 당연한 것이.. 타입이 틀리니까 .. NUMVER랑 CHAR랑 틀린거.. 뭐 똑같은 거다.. 근데 문제는 .. 이 놈은 타입케스팅이 거지 같다는 거다. 내가 잘 몰라서 그러겠지만.. 안 되는거 같다.. TO_LOB... 개나 줘라 그래 ㅡㅡ NVL은 되면서 DECODE, COALESCE는 까칠하게 싫다고 한다.. WHERE 절에 들.. 2008. 12. 8.
연산시 NULL 값을 주의하자. 연산시 NULL 값을 주의하자. 더하기 연산은 모르겠다만.. 빼기 연산을 수행 하면 거지 같은 일이 발생한다. NULL - 2 => ?? 결과값이 어떻게 나올까나. 결과도 그냥 값이 없다. -2 가 박힐 거라고 생각하면 오산이다. 이럴때는 NVL 처리를 해서 0을 만들어 줘야 제대로 된 값이 나온다. 대게.. 두개의 테이블을 OUTER로 조인하면 이러한 상황이 발생하지 않을까나~ 이래저래 NULL은 귀찮은 녀석이다. 왠만하면 default 값을 넣어 주는게 좋지 않을까나~ Sample SQL ] SELECT AA + BB FROM (SELECT '' AS AA FROM DUAL) a , (SELECT '-2' AS BB FROM DUAL) b 2008. 11. 19.
쿼리 에디터 툴이 날려먹은 쿼리 복구하기 먼저.. 오라클에 해당하는 내용이다. 쿼리문을 커맨드창이나 메모장에서 작성하기는.... 흠좀무 다.. 그래서 쿼리 에디터 툴을 쓰기 마련이다. 오라클에서 제공하는 SQL Developer나 두꺼비를 쓰던지 귤을 쓰던지 쿼리를 작성을 하게 된다. 그러다가 느닷없이 재앙은 다가온다.. 어플리케이션이 갑자기 죽어 버린다. 저장도 안 했는데... 다행스럽게도 재 시작하면 이전 쿼리를 복구 시켜 준다거나 쿼리 히스토리가 기록되어 있어서 복구 시키면 된다. 하지만.. 때때로 이 놈이 복구가 안 되는 수가 있다. 이럴땐 진짜 의욕상실이다. 해서 에디터 프로그램에서 날려먹은 쿼리를 DB에서 찾아 오는 방법도 알아 둘 필요가 있다고 느꼈다. 어제 그랬으니까 -_- 실행환경은 ORACLE 10g 다. v$sqlarea나 .. 2008. 9. 25.
워우~ 데이터베이스 공부하기 딱 좋은 자료. http://wiki.oracleclub.com/pages/viewpage.action?pageId=1180716 좋은거 건졌다.. 음하하하하하하 나중에 시간내서 읽어 봐야 겠다. nested loops 조인에 관해 이래저래 찾다가 발견한 사이트. 아직 읽어 보지는 않았지만..;;; 완전 굿 인듯 ㅋ 2008. 9. 9.
regexp_like 를 이용해서 숫자인 걸 찾아라는 조건을 주자.. ... 제목이 더럽게 길구나.. -ㅇ- 예제를 좋아라 하는 케이군은 바로 예제를... with tt as ( select '123456' dd from dual union select '123kei' dd from dual ) select * from tt where regexp_like(dd,'[0-9]{6}') 위의 쿼리는 데이터가 숫자로 이루어져 있는 놈만 뽑아 내는 쿼리이다. regexp_like를 이용해서 간단하게 처리할 수 있다. 더구나 regexp_like를 사용하면 인덱스를 타고 다닌다더라.. 오우.. 직관적으로 보면 알겠지만.. 혹시나 싶어서 간단하게.. -_- [0-9] 는 보다 시피 숫자는 0~9 로 이루어져 있다는 걸 뜻하겠지... 요거로 장난치면 숫자 범위를 지정할 수도 있다. 그.. 2008. 9. 9.
SUM 과 COUNT 의 차이... 이런..... 이런게 혼동 될 줄이야.. -ㅇ- 저량의 데이터에서야 그냥 보면 되지만.. 대량의 데이터로 아이체크가 잘 안 될 때는.. 실수를 저질렀을 때 눈치 채지 못 할 수도 있다.. 아주~ 잠시 혼동을 한게 있는데.. SUM 과 COUNT 의 차이점... 나 요즘 왜 이러나.. =ㅁ= with test as ( select 'a' as col1,'1' as b from dual union all select 'a' as col1,'2' as b from dual union all select 'a' as col1,'3' as b from dual union all select 'b' as col1,'1' as b from dual union all select 'b' as col1,'2' as b .. 2008. 9. 5.
over(partition by) 를 사용해 보자. 종합 선물 세트다. with, union all, decode, row_number(), over(partition by) 가 나온다. with kk as ( select '강군' as aa,'배고플때' as bb, '바나나' as cc from dual union all select '강군','배고플때','멍멍이' from dual union all select '강군','배부를때','고래' from dual union all select '강군','배부를때','참치' from dual union all select '강군','정신없을때','해삼' from dual union all select '강군','배부를때','바나나' from dual union all select '케이씨','정신없을때','.. 2008. 8. 28.
숫자 출력 포맷을 지정해 보자 #1. 자리수 찍어 주기 숫자 포맷을 세 자리마다 ,를 찍어 줘보자. SELECT TO_CHAR(number_data, '999,999,999,999') FROM TBL_NAME 이게.. 엄청 간단해 보이지만.. 모르는 사람은 개삽질 하는 거다~ 하하하하하 ...... 끝 2008. 8. 21.
오라클 서비스 시작 시키는 배치파일 맹글어 보기 뭐.. 별건 아니다. 단지 오라클 시작 시키는게 쬐금 귀찮을 때 써 먹을 만한 배치파일이다. 내용도 별거 음따.. 하하..~ 오라클을 설치하면 기본적으로 자동 시작으로 되어 있을 것 이다. 허나.. 윈도우 로딩 할 때 시작되는 서비스 들이 많고 특히나 오라클 처럼 무겁다면... 9i는 덜 하지만 10g는 겁내 무거워 졌으므로... 로딩 시간이 길어지고 버벅이는 느낌도 든다. 또한.. 오라클을 매일같이 쓰는게 아니라면.. 자동 시작은 더더욱 쓸대 없는 짓이 된다. 해서~ 서비스 시작을 수동으로 바꿔 놓고.. 낸쥬 쓸대가 있을 때 서비스를 수동 시작하려면 솔직히 귀찮다 -_- 고로.. 더블 클릭하면 오라클에서 필요한 서비스가 올라오게 만드는 배치파일을 하나 맹글기록 하자. 기본적인 문법은.. NET STAR.. 2008. 7. 7.
반응형