본문 바로가기

Database

(4)
Oracle 컬럼명 Alias 처리 WITH 문을 쓸 때, 내부 컬럼을 alias 처리 할 때가 있다. 이때, 한글 문자에 대한 alias 처리 시에는 더블쿼테이션을 넣어 처리한다. 영문일 때에는 주의가 필요한 게 더블쿼테이션을 넣으면 낭패. 분명히 컬럼은 생성됐고, * (asterisk) 로는 모두 보여 지지만, 해당 컬럼만 특정 지우면 에러가난다. ORA-00904: "CST_VFOOD": 부적합한 식별자 이 에러가 이런 의미로 발생할 수 있다는 것은 생각도 못한 것.
Oracle 유형 변경 처리 Oracle 의 유형은 Function 에서 테이블 목록으로 표출하기 위해서 테이블 형태로 표출하기 위한 처리가 필요하다. 우리는 그저 유형의 컬럼을 하나 추가하려는 것이지만, 이 유형이 어찌나 많은 곳에서 쓰이는 Dead Lock 이 걸릴 것만 같아 쉽게 변경 하기 겁난다. 게다가 이 유형은 변경이 쉽게 되지 않는다. 이유는 테이블 유형에 Dependence가 걸려 있기 때문이다. 변경 방법은, ① 테이블 유형을 DROP 처리 ② 유형에 컬럼 추가해서 저장 ③ 다시 테이블 유형 생성 이 방법이 쉽지 않기 때문에 다음의 아이디어로 접근해서 처리하고자 한다. ① 신규 유형을 생성한다. (적용하려는 유형으로) ② 테이블 유형도 생성한다. ③ Package에 해당 유형을 컴파일 한다. ④ 기존 유형을 변경한다..
소팅에 대하여 일반적인 소팅에 더하여 아래와 같은 방법은, 시사점이 좀 있는 것 같다. ORDER BY DECODE(PRD.PRD_SP_CD, '20', 1, 2), PRD.PRD_LCLS_ID, CART.CART_GRP_ID , CART.DLV_DATE NULLS LAST, CART.INST_DTM DESC 위의 예제에서 빨강색은 DECODE를 사용하여, 첫번째 컬럼 아니면 두번째 컬럼을 순서로 잡게 함. 그 아래 파랑색은 NULL의 경우 맨위로 올라오는 ORACLE 특성을 감안해서 NULL일 경우 마지막으로 보내라는 것임.
ORA-06502: 숫자에 문자열 오류 이게 뭔가 싶었다. 문제의 프로시저는 프로시저 안에서 루핑을 돌며 또다른 프로시저를 돌리는 것이었는데 그 안의 프로시저는 파라미터가 무려 70개가 넘었다. 뭐란 말인가. 숫자여야 하는데 문자로 담기고 있는 것이라니. 해서 모든 숫자가 될만한 변수들의 IS_NUMBER체크를 모두 해봤다. 모두 정상이었는데 무슨 말인가! 답은 의외로 간단한 곳에 있었다. DATE형을 받아야 하는 곳에서 TO_CHAR로 넘겨 받아 난 에러였다. 이건 아무도 찾을 수 없다. 구글에서도 찾아지지 않는 문제다. 어처구니없었고, 오라클이 부정확한 오류 메세지가 많이 원망스러웠다.