PL/SQL(Procedure, Package)을 사용하다 보면 동적으로 쿼리(Query)를 생성하거나 텍스트(text) 쿼리를 입력 받아서 실행해야하는 경우가 있다. 다음 두가지 방법을 적절히 사용하면 좋은 결과를 얻을수 있다. EXECUTE IMMEDIATE : Inset, Update, Delete 구문을 실행하거나 Select 구문을 실행 시 INTO를 사용하여 단일 값을 리턴 받을 때 사용 OPEN-FOR : Select 구문을 실행 시 Cursor를 리턴 받을 때 사용 주의 : 바인드 변수(:) 사용 시 쿼리 내부에서 변수명은 의미가 없고 변수 순서, 개수가 USING의 변수 순서, 개수와 일치해야 한다. 바인드 변수가 없다면 USING는 생략가능. 1. EXECUTE IMMEDIATE (IN..
PostgreSQL에서 오라클(Oracle)에서 사용하는 날짜에 0.99999를 더하여 23:59:59 로 만드는 방법 오라클(Oracle) SQL : SELECT TRUNC(SYSDATE) + 0.99999 DTE FROM DUAL; □ PostgreSQL SELECT CURRENT_DATE + (INTERVAL '0.99999 DAY') DTE; - 1일은 86400초 이며 0.99999일은 86399.136초 입니다. 결과(Result) :
오라클 11g 이상이면 REGEXP(정규식) 함수를 이용하여 손쉽게 가능하나 그 이하 버전에서는 INSTR 함수를 이용하여 비슷한 효과를 얻을 수 있다. □ 방법 1. (REGEXP 이용) - Oracle 11g --가상 테이블 WITH TEST_TABLE AS ( SELECT '고구려' COUNTRY, '1대' ST, '동명성왕' KING_NM FROM DUAL UNION ALL SELECT '고구려' COUNTRY, '3대' ST, '대무신왕' KING_NM FROM DUAL UNION ALL SELECT '백제' COUNTRY, '1대' ST, '온조왕' KING_NM FROM DUAL UNION ALL SELECT '고구려' COUNTRY, '2대' ST, '유리왕' KING_NM FROM DUA..
WM_CONCAT 함수를 이용하여 손쉽게 여러행의 데이터를 한 컬럼으로 합칠 수 있다.□ 방법 1. (WM_CONCAT 이용) --가상 테이블 WITH TEST_TABLE AS ( SELECT '고구려' COUNTRY, '1대' ST, '동명성왕' KING_NM FROM DUAL UNION ALL SELECT '고구려' COUNTRY, '3대' ST, '대무신왕' KING_NM FROM DUAL UNION ALL SELECT '백제' COUNTRY, '1대' ST, '온조왕' KING_NM FROM DUAL UNION ALL SELECT '고구려' COUNTRY, '2대' ST, '유리왕' KING_NM FROM DUAL UNION ALL SELECT '백제' COUNTRY, '3대' ST, '기루왕' ..
직원명을 초성으로 검색할수 있도록 요청이 들어와서 급하게 만들었다. 직원수가 아주많은곳에서는 where절에 사용하면 안됨... 예) fn_korinitialkeyword('홍길동') return : ㅎㄱㄷ select * from 테이블 where fn_korinitialkeyword(직원명컬럼) like '%ㅎㄱㄷ%' function fn_korinitialkeyword( str in varchar2) return varchar2 is returnStr varchar2(100); cnt number := 0; tmpStr varchar2(10); begin if str is null then return ''; end if; cnt := length(str); for i in 1 .. cnt loop ..