오라클 조건문에 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') ▲ 패지키에 포함된 프로시저가 조회 되는것을 확인 할 수 있다
오라클 REGEXP_REPLACE 다중(여러개) Replace(치환) 하는 방법 오라클 10g 부터 정규식 함수가 추가 되었다. 정규식을 사용하여 기존 함수보다 더 많은 기능을 수행한다.기존 Replace 함수를 사용하여 여러개의 문자를 치환하기 위해서는 해당 함수를 중첩으로 사용하였다. REGEXP_REPLACE 함수를 한번 사용하여 여러개의 문자를 치환하는 방법을 알아보자. --치환할 문자를 |로 구분하여 입력 SELECT REGEXP_REPLACE('Stay Hungry, Stay Foolish. - Steve Jobs', 'Stay|Foolish|Steve', '') FROM DUAL --결과: Hungry, . - Jobs ; --문자를 제거만 할꺼면 3번재 파라미터는 생략가능 SELECT RE..
오라클에서 날짜의 요일(Weekday)을 구하기 위해서는 TO_CHAR 함수를 사용하면 된다. TO_CHAR 함수는 날짜의 요일을 정수 또는 문자(영문 or 한글)로 반환받을 수 있다. 아래의 예제를 보면 쉽게 이해할 수 있을 것이다. 목차 요일 구하기 (정수) 요일 구하기 (한글) 사용 예제 요일 구하기 (정수) SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd') AS "날짜" , TO_CHAR(SYSDATE, 'd') AS "요일" FROM dual TO_CHAR("날짜", "포맷") TO_CHAR 함수의 포맷 인자에 "d"를 입력하면 해당 날짜의 요일이 정수로 반환된다. (1:일, 2:월, 3:화, 4:수, 5:목, 6:금, 7:토) 요일 구하기 (한글) SELECT TO_CHAR(..
[ 오라클 날짜의 년을 더하고 빼는 방법 ] 날짜에서 년을 더하고 빼기 위해서는 ADD_MONTHS() 함수를 황용하여 년을 개월수로 환산하여 연산을 하거나 날짜에 일수를 빼는 방법을 주로 사용한다. 위의 방법도 똑같은 결과의 값을 얻을수 있지만 INTERVAL을 활용하면 조금더 쉽고 직관적으로 년을 더하거나 뺄수 있다. --년을 더하고 빼기 SELECT SYSDATE - (INTERVAL '2' YEAR) MINUS_YEAR , SYSDATE + (INTERVAL '2' YEAR) ADD_YEAR FROM DUAL ※ INTERVAL 여러가지 활용 방법 SYSDATE + (INTERVAL '1' YEAR) --1년 더하기 SYSDATE + (INTERVAL '1' MONTH) --1개월 더하기 SYSD..
ORA-01785: ORDER BY 항목은 SELECT 목록 식의 수라야 합니다 ORDER BY 절에서 해당 오류가 발생 하였을 경우 ORDER BY 절에 함수(DECODE, NVL, TO_NUMBER, 사용자함수 등)를 사용하였는지 확인해 보아야 한다. 일반적으로 ORDER BY 절에 함수를 사용하는건 아무런 이상이 없지만 해당 쿼리문에 집합연산자 ( UNION, UNION ALL , MINUS, INTERSECT)가 사용이 되었다면 오류가 발생 한다. 집한연산자가 사용된 쿼리문의 ORDER BY 절에는 함수 사용을 하지 말아야하며 꼭 사용해야 한다면 해당 쿼리문을 인라인 뷰(INLINE VIEW)로 감싸서 ORDER BY를 하면 된다. UNION ALL을 사용한 쿼리문에서 ORDER BY 절에 DEC..