본문 바로가기

기술32

[오라클/티베로]순서를 처리하는 분석함수 - RANK() , DENSE_RANK(), ROW_NUMBER() 비교 Ranking Function 비교 RANK() , DENSE_RANK(), ROW_NUMBER()는 데이타의 순위를 구할때 쓰는 함수로 유용하게 많이 사용하고 있습니다.각 함수의 차이점을 한번 확인해보세요.. SELECT region_id, cust_nbr           ,  SUM( tot_sales) cust_sales           ,  RANK() OVER (ORDER BY SUM(tot_sales) DESC) sales_rank               ,  DENSE_RANK() OVER (ORDER BY SUM(tot_sales) DESC) dense_rank           ,  ROW_NUMBER() OVER (ORDER BY SUM(tot_sales) DESC) sales_n.. 2024. 12. 19.
[오라클/티베로]WITH절 활용 - /*+ Inline */ /*+ Materialize */ 힌트 활용 동일한 서브쿼리의 결과가 반복적으로 사용될 때 비효율성을 방지하기위해 사용한다. 다수의 처리를 최대한 단순하게 처리가능시스템에 영향 최소화유지보수 업무수행시 편리사용되는 SQL횟수를 줄일 수 있음  1. 단독 사용시WITH v_dept_costs AS( SELECT  dname, SUM(sal) dept_total    FROM emp 3, dept d   WHERE e.deptno = d.deptno   GROUP BY dname)SELECT *   FROM  v_dept_costs  WHERE dept_total > 1000000;  2.  복수로 사용시 WITH v_dept_costs AS( SELECT  dname, SUM(sal) dept_total    FROM emp 3, dept d   W.. 2024. 12. 18.
[오라클/티베로]NULL값 처리 - NVL, NVL2, COALESCE 1. NULL 이란? - NULL은 존재하지 않는것- 공백이나 0은 NULL이 아니다.- NULL은 존재하지 않는것이므로 연산에 포함되면 그 결과는 무조건 NULL 이다. SELECT 5+0 AS A, 5+ NULL AS B  FROM DUAL;   2. NVL, NVL2, COALESCE 이용  1)  NVL(a,b)     : a가 null이 아니면 a출력, a가 null이면 b출력 SELECT NVL(20,-10) AS A, NVL(NULL, -10) AS B FROM DUAL;  2)  NVL2(a,b,c)      a가 null이 아니면 b출력, a가 null이면 c출력  SELECT NVL2(30,20,-10) AS A, NVL2(NULL, 20, -10) AS B  FROM DUAL ;  3.. 2024. 12. 6.
[오라클/티베로] 힌트(hint) 종류 및 사용법 힌트는 일종의 지시문이다. SQL 문장에 힌트를 추가하여 Tibero의 질의 최적화기(Optimizer)에 특정 행동을 지시하거나 질의 최적화기의 실행 계획을 변경한다. 질의 최적화기가 항상 최적의 실행 계획을 수립할 수는 없다. 따라서 개발자가 질의 최적화기의 실행 계획을 직접 수정할 수 있는 방법을 마련한 것이 바로 힌트이다.SQL 문장의 한 블록당 힌트는 하나만 올 수 있으며, SELECT, UPDATE, INSERT, DELETE 절 바로 뒤에 위치해야 한다.다음은 힌트를 사용한 예이다. (DELETE|INSERT|SELECT|UPDATE) /*+ hint [hint] ... */또는(DELETE|INSERT|SELECT|UPDATE) --+ hint [hint] ... (예) SELECT /*+.. 2024. 11. 20.
[오라클/티베로]REGEXP_COUNT 함수 특정문자 사용갯수 COUNT REGEXP_COUNT 함수   REGEXP_COUNT 함수: 문자열내에서 특정 문자를 사용한 갯수를 반환 하는 함수입니다. (예)SELECT REGEXP_COUNT('A1 / B1 / C1 / D1 / E1,F1,G1','/') AS CNTFROM DUAL => 조회 결과 : 4      [상세설명 ] 2024. 11. 5.
[오라클/티베로]DUAL 테이블과 CONNECT BY LEVEL를 활용한 달력구하기 DUAL 테이블과 CONNECT BY LEVEL 을 이용한 달력(월별일자) 을 구하는 쿼리 입니다. 보통 컬린더 테이블을 만들어 놓으나 사용하나, 없는 경우 유용하게 사용가능합니다. * 날짜 함수 관련 내용 SELECT SUBSTR(YYYYMMDD,1,6) AS YYYYMM , YYYYMMDD ,TO_CHAR(TO_DATE(YYYYMMDD, 'YYYYMMDD'), 'DY') DY FROM ( SELECT TO_CHAR(SYSDATE,'YYYYMM') || LPAD(LEVEL, 2, '0') AS YYYYMMDD FROM DUAL CONNECT BY LEVEL 2024. 2. 27.
[오라클/티베로]LISTAGG / AGGR_CONCAT 함수 사용 여러줄의 세로 데이타를 -> 가로로 표현하고자 할때 사용하는 함수입니다. (예) 부서별 사용자를 표기하고자 하는 경우 * AGGR_CONCAT 함수 사용 SELECT DEPT_NO, AGGR_CONCAT(USER_ID, ',') AS users FROM (SELECT '부서1' DEPT_NO, 'a' AS USER_ID FROM DUAL UNION ALL SELECT '부서2' DEPT_NO, 'b' AS USER_ID FROM DUAL UNION ALL SELECT '부서1' DEPT_NO, 'c' AS USER_ID FROM DUAL ) TMP GROUP BY DEPT_NO => 결과 * LISTAGG 함수 사용SELECT DEPT_NO, LISTAGG(USER_ID,',') WITHIN GROUP(.. 2024. 2. 23.
[오라클 & 티베로]쿼리 캐쉬메모리 옵션 설정 CUCURSOR_SHARING [CUCURSOR_SHARING] SQL 조건절에 있는 상수 값들을 변수로 전환시켜 parsing 함으로써 cursor를 공유할 수 있도록 해줍니다. - EXACT : 모든 문장이나 변수까지 동일해야 동일한 문장으로 인정 - SIMILAR : 문장은 동일하고 바인드 변수값이 다를 경우에도 동일한 문장으로 인정 - FORCE : 문장은 동일하지만 상수값이 다른 sql일 경우에도 동일한 문장으로 인정 [예시] alter session set cursor_sharing=force; INSERT INTO ZZ_TEST (AA, BB) VALUES ('1', 'a'); INSERT INTO ZZ_TEST (AA, BB) VALUES ('2', 'b'); INSERT INTO ZZ_TEST (AA, BB) VALU.. 2023. 12. 11.
[오라클/티베로]테이블상세정보 및 GRANT권한부여리스트,그외OBJECT(함수,프로시저,트리거,JOB)리스트 테이블 목록테이블 상세정보 추출GRANT부여된 테이블 리스트함수 리스트프로시저 리스트트리거 리스트JOB등록 리스트 1. 테이블 전체 리스트 SELECT * FROM USER_TAB_COMMENTS 2. 테이블별 상세정보 추출 쿼리 SELECT A.TABLE_NAME, A.COMMENTS table_comments, DECODE(D.COLUMN_NAME,NULL,'','PK') PRIMARY_KEY , C.DATA_TYPE ||'('|| C.DATA_LENGTH ||')' DATA_TYPE, C.NULLABLE, B.COLUMN_NAME, B.COMMENTS col_comments FROM USER_TAB_COMMENTS A, USER_COL_COMMENTS B, USER_TAB_COLUMNS C, USE.. 2023. 11. 7.