오라클 문자 앞 부분 숫자 제거 방법 오라클 10g 버전 부터 정규식 함수 (REGEXP_REPLACE 등)가 추가 되었다 정규식 함수를 사용하면 문자열을 다양한 패턴으로 조작 할 수 있다 SELECT REGEXP_REPLACE('080821HM','^\d+') RESULT1 , REGEXP_REPLACE('080821HM','^[0-9]+') RESULT2 , REGEXP_REPLACE('080821HM','^[[:digit:]]+') RESULT3 FROM DUAL "080821H" 이라는 코드의 앞 숫자 부분 "080821" 제거하는 예제이다 ^ 문자열이나 행의 처음을 의미 \d 숫자 / [0-9], [:digit:] 숫자를 의미하는 동일한 표현식 + 1회 이상 포함 하나 이상의 숫자로 시작하는 부..
오라클 조회 시 컬럼명 별칭(Alias) 대소문자 적용 방법 오라클에서 데이터 조회시 컬럼 별칭을 대소문자를 구분하여 쿼리문을 작성해도조회결과의 컬럼명은 모두 대문자로 변경이 된다. 컬럼명에 지정한 별칭 그대로 결과에 표시 되도록 하기 위해서는 별칭을 쌍따옴표("")로 감싸주면 된다. 쌍따옴표를 사용하면 대소문자도 구분가능하며 한글로 별칭을 부여할 수 있다.
오라클에서 수치값의 음수 부호를 제거하고 절댓값을 구하기 위해서는 ABS 함수를 사용하면 된다. 절댓값은 수치값의 부호를 뺀 값을 의미한다. 양수는 부호가 없기 때문에 그대로 출력되고 음수는 마이너스(빼기) 부호를 제거한 값이 출력된다. 절댓값 함수 : ABS("숫자") SELECT -10 AS result1 , ABS(-10) AS result2 FROM dual 절댓값 함수를 사용하면 음수 부호를 없애고 값을 반환하는 것을 확인할 수 있다. SELECT ABS(10) , ABS(12.5) , ABS(0) , ABS(-10) , ABS(-12.5) FROM dual 양수와 0은 그대로 출력되고 음수는 부호가 제거된 값이 출력되는 것을 확인할 수 있다.
오라클 IN 파라미터 최대 개수 오라클에서 IN을 사용하면서 항상 최대 몇개까지 파라미터를 넣을수 있는지 궁금 했다. 간단히 임시 날짜 테이블을 생성해서 테스트한 결과 최대 1000까지 가능하다. 파리미터 개수 초과 시 해당 에러가 발생한다. "ORA-01795: 목록에 지정 가능한 식의 최대수는 1000 입니다" 텍스트 파라미터는 1000개 최대 이지만 서브쿼리로 IN 파리미터를 넣으면 무한정 가능하다 SELECT * FROM TEMP_DATE WHERE YYYYMMDD IN ( SELECT AA.CODE FROM CODET AA )
오라클 조건문에 WHERE 1=1 사용하는 이유 쿼리를 분석하다 보면 조건문에 의미없는 조건(1=1)이 코딩되어 있는 경우가 있다. 과거 시스템을 마이그레이션 할 때 포함 되었거나 의미를 몰라서 사용한 경우라고 생각한다. 동적쿼리에서 if문을 사용하여 조건을 유동적으로 바꾸고 싶을때 WHERE 1=1 으로 첫 조건을 선언 후AND 조건을 유동으로 바꾸어도 WHERE이라는 구문은 신경쓰지 않아도 된다. 동적 쿼리문이라도 첫 WHERE 조건이 명확하다면 1=1을 사용하지 않고 첫번째 조건의 컬럼을 사용하면 된다. 일반 쿼리문 작성 시 WHERE 조건에 1=1는 무의미 하다. 사용하지 말것. 동적 쿼리문을 작성 시 첫번째 조건 WHERE 구문에 어떤 조건이 해당될지 불명확할 때는 WHERE 조건줄을 1=1로 ..
오라클 파티션 테이블 조회 방법 파티션 테이블로 생성이 되어 있으면 파티션을 지정하여 조회를 하면 아주 빠르게 데이터를 조회할 수 있다. 파티션 기준 컬럼 잘 확인하여 원하는 데이터가 해당 기준 컬럼의 조건에 해당 되는지 확인후 파티션을 지정하여 조회하면 된다. SELECT * FROM 테이블명 PARTITION (파티션명) --파티션 테이블 조회 SELECT * FROM ACIPCATT PARTITION (ACIPCATT_2017) WHERE MEDDATE BETWEEN TO_DATE('20170101','YYYYMMDD') AND TO_DATE('20170131','YYYYMMDD') ; --파티션 테이블 키 컬럼 조회 SELECT * FROM ALL_PART_KEY_COLUMNS WHERE NAME..
내국인/외국인 주민등록번호 유효성 검사 개인정보법이 개정되어 주민등록번호 저장 시 암호화하여 저장해야 한다. 암호화되지 않은 주민등록번호가 있을시 불이익을 당할수 있으므로 해당 데이터를 삭제하거나 DB 컬럼을 암호화 해야한다. 주민등록번호와 유사한 계좌번호 등 13자리의 숫자가 존재하기도 한다. 진짜 주민등록번호인지 쉽게 판단할 수 있는 함수가 필요한데 오라클에서 기본으로 제공하지 않으므로 직접 생성해서 사용해야 한다. 아래의 함수는 내국인과 외국인 주민등록번호의 유효성을 판단하여 0 (주민번호 아님), 1 (주민번호) 을 리턴한다. 12345678910111213141516171819202122232425262728293031323334353637CREATE OR REPLACE FUNCTION FT_I..
오라클 원 단위 금액 절사 방법 TRUNC() 함수를 사용하여 원단위 절사를 할 수 있다아래는 \1,255원의 금액 일부를 절사하는 예제이다 --1원 단위 이하 절사 SELECT TRUNC(1255, -1) FROM DUAL ; 결과 : 1250 --10원 단위 이하 절사 SELECT TRUNC(1255, -2) FROM DUAL ; 결과 : 1200 --100원 단위 이하 절사 SELECT TRUNC(1255, -3) FROM DUAL ; 결과 : 1000
RAISE_APPLICATION_ERROR (사용자 에러코드 함수) PL/SQL에서 사용자정의 함수를 만들때 오류코드 또한 사용자가 임으로 설정을 할 수 있다. 다음 사용자 오류처리 함수를 사용하여 -20000 ~ -20999 사이의 코드를 사용하여 에러 메시지를 정의 할 수 있다. RAISE_APPLICATION_ERROR( [에러코드], [에러메시지] ) 에러코드 : -20000 ~ -20999 사이의 코드 예시) RAISE_APPLICATION_ERROR(-20000, '지정한 월이 부적합합니다.') 사용자 함수 예외처리(EXCEPTION) 부분에 에러코드 함수를 사용 에러 발생 시 함수에서 정의한 에러메시지가 출력된다 사용불가능한 에러코드를 사용할 경우 (-20000 ~ -20999 범위가 아닌경..
패키지(Pckage) 내부 프로시저(Prodedure) 조회 방법패지키명으로 조회를 하면 패키지에 포함된 프로시저명을 조회할 수 있다그 외에도 함수, 프로시저, 트리거 등도 조회가 가능하다 /* 패키지 내부 프로시저 조회 */ SELECT * FROM ALL_PROCEDURES WHERE OBJECT_NAME = 'PKG_SUP_CS_D_01' ; /* 프로시저 조회 */ SELECT * FROM ALL_PROCEDURES WHERE OBJECT_TYPE IN ('PACKAGE', 'PROCEDURE', 'FUNCTION', 'TRIGGER') ▲ 패지키에 포함된 프로시저가 조회 되는것을 확인 할 수 있다