본문 바로가기

오라클6

오라클 SELECT .. INTO 시 결과 없을 때 처리 방법 오라클 프로시져 작성 중에 변수에 데이터를 담아 처리중에 발생한 오류였다.값이 없을수도 있는 경우를 대비해 예외 처리를 하고 아래 로직이 실행되어야 해서 고민하다 알게 된 방법.물론 구글느님께서 검색해 주셨다. SELECT .. INTO 시 NO DATA FOUND 예외인 경우 아래와 같이 처리한다. CREATE OR REPLACE PROCEDURE PROC_TEST IS BEGIN{ 다른 처리 내용....}BEGIN SELECT COL1 INTO V_COL1 FROM TB_TMP WHERE COND1 = ''EXCEPTION WHEN NO_DATA_FOUND THEN V_COL1 := NULL; IF V_COL1 IS NOT NULL THEN ..프로세스 처리 END IF;END; 아래 다른 로직 처리.. 2016. 1. 28.
오라클, 중복 데이터 삭제하기 아주 간단한 테이블을 만들더라도 잘 생각해야 된다. 귀찮다고 실천하지 않으면 꼭 이 작업을 하게 된다.반드시 데이터 무결성을 위한 수고를 아끼지 말자.어쨌든, 중복데이터를 삭제해야 할 일이 생겼다. 물론 테스트 중인 프로세스여서 크게 문제는 없지만..운영중에 발생했다면 아주 짜증 났을듯. 아래처럼 하자. delete from table_awhere rowid in (select rowidfrom(select * from(select ROW_NUMBER() OVER (PARTITION BY key_col_1 ORDER BY key_col_1) AS num, key_col_1from table_a)where num >= 2)) 2014. 4. 1.
오라클 DECODE, GREATEST 로 음수값 처리하기 음수면 0으로 반환하고 싶을 때, 처리하는 방법을 궁리했다. 구글의 힘으로 조합하니 아래와 같이 2가지 정도가 좋을 듯. 음수면 무조건 0을 반환하고 싶으면 GREATEST 함수를 사용하자.GREATEST(변수, 0) 하면 끝이다. 이 함수는 인자 중에 가장 큰 값을 반환해 주는 함수인데, 음수 보다 0이 크니 변수가 음수일 경우 0이 반환된다. 두번째는 부호에 따라 처리해야 하면DECODE(SIGN(변수), 1, 0, 변수)SIGN함수는 부호를 반환해 주는데, 양수면 1, 음수면 -1, 0이면 0이 반환된다. 그에 따라 알아서 사용하면 될 듯. 끝~ 2013. 4. 10.
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다 일반 쿼리로는 문제없이 사용했던 코드를 프로시져에 집어넣었더니 딱 하고 저 에러가 떴다. 분명히 테이블은 존재하고 일반 SELECT 문으로도 조회가 잘 된다. 그런데도 프로시져에 위치시키면 제목과 같은 에러를 뱉어낸다. 여러 테이블이 존재하는데 유독 한 테이블만 이런 현상이 발생했다. 킁.. 구글링~~ 존재하는 테이블인데도 읽지 못하는 것은 권한 문제라고 한다. 그럼 그 한 테이블만 권한 설정을 잘못해서 만들었다는 거냐. 만든넘 누구냐~. 시스템 유저로 들어가서 권한을 할당해주는 작업을 진행했다. 인터페이스 용 테이블이여서 다른 권한은 없어도 되고 SELECT 권한만 부여했다. grant select on [유저명.권한을 할당할 테이블명] to [테이블에 권한을 행사 할 유저명]; 요렇게 처리하고 프로시.. 2011. 6. 14.
오라클 MERGE INTO - 한번에 INSERT, UPDATE 하기 가끔 두 테이블을 비교해서 INSERT를 하거나 UPDATE 를 해야하는 경우가 발생한다. MSSQL 때는 IF EXISTS ... THEN 구문을 사용했었다. 사실 더 좋은 쿼리가 있었을지도 모르지만 내가 모르니까 모르는 것이겠지. 오라클로 인터페이스 작업을 하다보니 좀 파워있게 사용해야할 일이 많이 생겼다. 사실 인터페이스 작업이야 INSERT, UPDATE가 전부이니까. 오라클은 MSSQL같이 사용하지 못하길래 찾아봤더니 아주 멋진 녀석이 있었다. 단 제약조건은 좀 있지만서도. 일단은 오라클 9 버젼 이상부터 지원하는 것 같다.(아니면 강력하게 태클 요청 드림) 기본 구문은 아래에 있음. MERGE INTO 타겟테이블 TT USING 소스테이블 ST ON (TT.필드1=ST.필드1 AND TT.필드.. 2011. 6. 3.
오라클 Job을 테스트하자. 이번에 오라클로 인터페이스 작업을 하게 됬다. Job으로 프로시져를 실행시키는 작업을 해야 할 것 같아서 테스트를 진행해 봤다. win 7 x86 + 오라클 10g + 토드 9.0.1 으로 작업했다. 하단 스크립트들은 모두 토드의 마법사로 만든 것이다. 엑셀에 정리한 내용을 옮겨왔더니 무지막지하게 보기 싫어져 버렸다. 테스트 시나리오 테스트를 진행하기 전 가상의 시나리오를 생성한다. 1. 테이블을 생성한다. 테이블명은 test_schedule 필드구성은 일련번호, 비고, 입력일시로 간단하게 구성 일련번호는 시퀀스이고 시퀀스명은 SQ_TEST_SCHEDULE 임 sql 스크립트를 백업한다. 2. 프로시져 생성 프로시져명은 sp_test_schedule_ins test_schedule 테이블에 insert .. 2011. 4. 14.