본문 바로가기

Dev/DB-Oracle

테이블 일련번호에서 빠진 번호 찾기 SELECT 쿼리를 이용하다보면 일련번호(시퀀스)에서 빠진 번호를 찾아야 할 경우가 있다 이경우다음과 같은 쿼리를 이용하면 유용하다 1. 빠진번호 전체 검색 SELECT [seq_field]+1 FROM [table_name] WHERE ([seq_field]+1) NOT IN (SELECT [seq_field] FROM [table_name]) #일련번호 중 가장 큰수보다 1큰수도 같이 출력되므로 그값을 배제하는 조건을 추가하는 처리를 해야할 경우도 있다. 2. 빠진번호중 최소값 검색 SELECT min([seq_field]+1) FROM [table_name] WHERE ([seq_field]+1) NOT IN (SELECT [seq_field] FROM [table_name]) 3. 빠진번호중 최대.. 더보기
ORACLE PL/SQL 검색어 +/- 연산자 구현 ORACLE PL/SQL +/- 검색어 연산자 구현 DECLARE V_SQL_SEARCH varchar2(20000):=''; CURSOR SEARCH_STR_LIST (V_SEARCH_STR VARCHAR2) IS SELECT NVL(OPT_STR,SEARCH_STR) AS SEARCH_STR, R_RN FROM ( SELECT STR, OPT_STR, ROW_NUMBER() OVER (ORDER BY LV1, LV2 DESC) AS RN FROM ( SELECT ' '||V_SEARCH_STR||' ' AS STR, '' AS OPT_STR, 3 AS LV1, 0 AS LV2 FROM DUAL UNION ALL SELECT STR, SUBSTRB(STR, ST,ED-ST) AS OPT_STR, 2 A.. 더보기
ORACLE 동호배치도 출력 쿼리 작성 ORACLE 동호배치도 출력 쿼리 작성 WITH DONG_HO AS ( SELECT /*+ MATERIALIZE*/ DONG -- 동 , LPAD(FLOOR,2,'0')||LINE AS HO_NO -- 호 , FLOOR -- 층 , LINE -- 열 FROM ( SELECT '101' AS DONG, 1 AS FLOOR, '04' AS LINE FROM DUAL UNION ALL SELECT '101' AS DONG, 2 AS FLOOR, '01' AS LINE FROM DUAL UNION ALL SELECT '101' AS DONG, 2 AS FLOOR, '02' AS LINE FROM DUAL UNION ALL SELECT '101' AS DONG, 2 AS FLOOR, '03' AS LINE FRO.. 더보기
ORACLE DENSE_RANK 활용 세로데이터를 그룹별 비교 가능한 가로로 펼치기 ORACLE DENSE_RANK 활용 세로데이터 -> 그룹별 비교 가능한 가로로 펼치기 WITH TEMP AS ( SELECT '1' AS GRP, 'A' AS GB, 'A_01' AS ITEM, 1 AS QN FROM DUAL UNION ALL SELECT '1' AS GRP, 'A' AS GB, 'A_01' AS ITEM, 2 AS QN FROM DUAL UNION ALL SELECT '1' AS GRP, 'B' AS GB, 'B_01' AS ITEM, 3 AS QN FROM DUAL UNION ALL SELECT '2' AS GRP, 'A' AS GB, 'A_01' AS ITEM, 4 AS QN FROM DUAL UNION ALL SELECT '2' AS GRP, 'A' AS GB, 'A_02' A.. 더보기
ORACLE MODEL구문을 이용하여 변수 치환 후 산식 계산하기 ORACLE MODEL구문을 이용하여 변수 치환 후 산식 계산하기 CREATE OR REPLACE FUNCTION FN_CALC_FMLA(P_EXP VARCHAR2) RETURN NUMBER IS V_EXP VARCHAR2(4000); V_CNT NUMBER; V_RTN NUMBER; BEGIN V_EXP := REPLACE(P_EXP, ' ',''); /* 거듭제곱근계산*/ SELECT REGEXP_COUNT(P_EXP, '\^') INTO V_CNT FROM DUAL; FOR I IN 1 .. V_CNT LOOP SELECT REGEXP_REPLACE(V_EXP, '[\(](.+)[\)]\^([0-9]+)|([0-9\.]+)\^([0-9]+)', '(power((\1\3),\2\4))') INTO V.. 더보기
Oracle - 전환보증금(하한보증금) 한도 계산 Query 전환보증금(하한보증금) 한도 계산 WITH T AS ( SELECT 1 NO , 12333000 GMY , 120000 RFE FROM DUAL UNION ALL SELECT 2 , 22330000 , 220000 FROM DUAL ) SELECT NO , GMY , RFE , CNV_GMY , CNV_RFE , APL_GMY , APL_RFE , PRE_GMY , DFR_GMY , DECODE(ORDER_NUM, 1, 'OK') OK FROM ( SELECT T2.* , APL_GMY-PRE_GMY DFR_GMY , ROW_NUMBER() OVER (PARTITION BY NO ORDER BY CASE WHEN APL_GMY-PRE_GMY < 0 THEN NULL ELSE APL_GMY-PRE_GMY .. 더보기
ORACLE WITH구문을 이용한 재귀쿼리- Subquery Factoring ORACLE WITH구문을 이용한 재귀쿼리- Subquery Factoring 아래는 승산식 합동법을 구한 쿼리이다 초기값은 아래 링크를 참조하세요. 승산식 합동법 : http://terms.naver.com/entry.nhn?docId=830147&cid=42344&categoryId=42344 WITH T (NUM, V_X, V_A, V_M) AS ( SELECT NUM , MOD(9463 * 1327, POWER(10, 5)) , 1327 , POWER(10, 5) FROM (SELECT LEVEL NUM FROM DUAL CONNECT BY LEVEL 더보기