반응형

조건 칼럼에 연산이 필요한 경우는 칼럼을 변형시키는 연산 대신에 비교되는 상수 값을변형시키는 방법을 찾아야 한다. 컬럼을 변형시킬경우 Index가 존재해도 Full Scan을 하게된다.


SUBSTR(ENAME, 1,1) = '이'  -> ENAME LIKE '이%'

SAL * 12 > 30000000            -> SAL > 30000000 / 12

TO_CHAR(BIRTH,'YYYYMMDD') = '20020909'   -> BIRTH = TO_DATE('20020909','YYYYMMDD')


2. NULL은 인덱스에 들어가지 않기 때문에 인덱스를 스캔할 필요가 없다. 따라서 NULL 비교 조건을 상수 조건으로 변경해야한다. 


name is null ->  name > ''    (VARCHAR2)

age is null   ->  age > 0       (NUMBER)


3. NOT operator를 조건으로 사용한 경우는 부정형 조건을 긍정형으로 변경하면 인덱스 스캔을 할 수 있다.

position <> 'MF'     ->  position < 'MF' OR position > 'MF

728x90
반응형

'Development > DataBase' 카테고리의 다른 글

[Oracle]시퀀스 만들기  (0) 2013.02.12
SQL 문 수행단계  (0) 2013.02.12
[Oracle]계층구조 가져오기  (0) 2013.02.12
[SQL]REGEXP_SUBSTR  (0) 2011.12.20
[Oracle]세로 data를 가로로 변형하기 - LISTAGG  (0) 2011.11.08
반응형
  1. SELECT
  2.    SYS_CONNECT_BY_PATH(ITM_NM,'>>')   HRCH_FULL_NM       -- 전체계층구조(이름)
  3. FROM  TABLE
  4.  
  5. WHERE ITM_CLSF_CD = '12131804'
  6. START WITH ITM_CD IS NULL
  7. CONNECT BY PRIOR ITM_CD  =  PARENT_ITM_CD

이렇게 쿼리를 작성하면


계층구조는 
ITEM >> ITEM >>  ITEM
이런 형식으로 나오게 된다.

START WITH ITM_CD IS NULL

ITM_CD IS NULL : ITM_CD 가 NULL 인것을  ROOT로 인식한다.

CONNECT BY PRIOR ITM_CD  =  PARENT_ITM_CD 

ITM_CD  =  PARENT_ITM_CD  : 하위코드와 상위코드의 관계를 정의한다.

728x90
반응형

'Development > DataBase' 카테고리의 다른 글

SQL 문 수행단계  (0) 2013.02.12
SQL 작성시 주의사항  (0) 2013.02.12
[SQL]REGEXP_SUBSTR  (0) 2011.12.20
[Oracle]세로 data를 가로로 변형하기 - LISTAGG  (0) 2011.11.08
[Oracle]ORDER BY 절에서 NULL 값 위치 지정  (0) 2011.09.26
반응형
오라클 10g부터 정규 표현식을 사용할수 있게 되었다ㅏ. 
REGEXP_SUBSTR 란 키워드이다. 아주 간편하게 필터링 할수 있다. ㅎㅎ

WITH TEMPTABLE AS 
       (SELECT IF_FILE_NM 
         FROM 
              (SELECT 'L6D0POMTK00020111116133559.txt' AS IF_FILE_NM 
                FROM DUAL 
                  UNION 
              SELECT '1K010POMPKP1020111117134202.txt' AS IF_FILE_NM 
                FROM DUAL 
                  UNION  
              SELECT 'W100W10002POMT20111122131003.txt' AS IF_FILE_NM 
                FROM DUAL  
                  UNION 
              SELECT 'E10000SWPOMT20111114232235_7942630.txt' AS IF_FILE_NM 
                FROM DUAL 
                  UNION 
              SELECT 'H10000GJPOMT201111221532409511.txt' AS IF_FILE_NM 
                FROM DUAL 
                  UNION 
              SELECT '1M114POMT20111122-184314-487.txt' AS IF_FILE_NM 
                FROM DUAL  
                  UNION 
              SELECT '1M114POMT20111122-221352-383.txt' AS IF_FILE_NM 
                FROM DUAL  
                  UNION 
              SELECT 'POGLNTIMK0.GDS.20111114222035' AS IF_FILE_NM 
                FROM DUAL 
              )  
       ) 
SELECT SUBSTR(REPLACE((REGEXP_SUBSTR(IF_FILE_NM , '([1-9]{1}[0-9]{13}|[1-9]{1}[0-9]{13}_[0-9]{7}|[1-9]{1}[0-9]{13}[0-9]{4}|[1-9]{1}[0-9]{7}-[0-9]{6}-[0-9]{3}).[a-zA-Z]{3}|[1-9]{1}[0-9]{13}$')),'-''' ) ,0 ,14) AS FILE_CRE_YMD 
  FROM TEMPTABLE


728x90
반응형
반응형
기존에 세로로 나온 DATA를 가로로 바꿀때에는 쿼리가 복잡했었지만 오라클 11g에서는 LISTAGG라는 함수를 사용해서 간단하게 만들수 있다. 

WITH RGN AS 
       (SELECT RGN_CD 
         FROM 
              (SELECT 'A' AS RGN_CD 
                FROM DUAL 
                  UNION 
              SELECT 'B' AS RGN_CD 
                FROM DUAL 
                  UNION 
              SELECT 'C' AS RGN_CD 
                FROM DUAL 
                  UNION 
              SELECT 'D' AS RGN_CD 
                FROM DUAL 
                  UNION 
              SELECT 'E' AS RGN_CD 
                FROM DUAL 
              ) 
       )  
SELECT LISTAGG(RGN_CD, ',') WITHIN GROUP (ORDER BY RGN_CD)AS RGN_CD 
  FROM RGN

결과
RGN_CD
--------
A,B,C,D,E 

쿼리도 복잡하지 않고 정말 한줄에 끝난다.!! 


728x90
반응형
반응형

ORDER BY COLUMNAME NULLS LAST   -> NULL 값을 마지막으로
ORDER BY COLUMNAME NULLS FIRST  -> NULL 값을 처음으로
728x90
반응형
반응형
DB : Oarcle

SELECT A.TABLE_NAME as 테이블명
     , B.COMMENTS as 테이블한글명
     , A.COLUMN_NAME as 컬럼명
     , C.COMMENTS as 컬럼한글명
     , A.DATA_LENGTH
     , A.DATA_TYPE     
     , A.NULLABLE
     , D.CONSTRAINT_NAME
     , D.CONSTRAINT_TYPE
FROM   ALL_TAB_COLUMNS A
, ALL_TAB_COMMENTS B
     , ALL_COL_COMMENTS C
     , ALL_CONSTRAINTS  D
WHERE  A.TABLE_NAME = B.TABLE_NAME
  AND  A.TABLE_NAME = C.TABLE_NAME
  AND  A.TABLE_NAME = D.TABLE_NAME
  AND  A.COLUMN_NAME = C.COLUMN_NAME
  AND  A.TABLE_NAME = :tableNm

CONSTRAINT_TYPE 을 'P' 로 설정해주면 입력한 테이블의 PK만 조회 가능하다. !

 
  
728x90
반응형
반응형
ColumnDatatypeNULLDescription
OWNER VARCHAR2(30) NOT NULL Owner of the object
TABLE_NAME VARCHAR2(30) NOT NULL Name of the object
COLUMN_NAME VARCHAR2(30) NOT NULL Name of the column
COMMENTS VARCHAR2(4000)   Comment on the column


테이블의 컬럼명과 컬럼 한글명을 검색할때 사용하면 된다. 

출처 : ORACLE DOCUMENTATION LIBRARY 
728x90
반응형
반응형
ColumnDatatypeNULLDescription
OWNER VARCHAR2(30) NOT NULL Owner of the object
TABLE_NAME VARCHAR2(30) NOT NULL Name of the object
TABLE_TYPE VARCHAR2(11)   Type of the object
COMMENTS VARCHAR2(4000)   Comment on the object


테이블 명을 알고 싶을때 사용하면 유용하다.!

출처 : ORACLE DOCUMENTATION LIBRARY 
728x90
반응형
반응형
Column              DatatypeNULLDescription
OWNER VARCHAR2(30) NOT NULL Owner of the constraint definition
CONSTRAINT_NAME VARCHAR2(30) NOT NULL Name of the constraint definition
CONSTRAINT_TYPE VARCHAR2(1)   Type of the constraint definition:
  • C - Check constraint on a table

  • P - Primary key

  • U - Unique key

  • R - Referential integrity

  • V - With check option, on a view

  • O - With read only, on a view

  • H - Hash expression

  • F - Constraint that involves a REF column

  • S - Supplemental logging

TABLE_NAME VARCHAR2(30) NOT NULL Name associated with the table (or view) with the constraint definition
SEARCH_CONDITION LONG   Text of search condition for a check constraint
R_OWNER VARCHAR2(30)   Owner of the table referred to in a referential constraint
R_CONSTRAINT_NAME VARCHAR2(30)   Name of the unique constraint definition for the referenced table
DELETE_RULE VARCHAR2(9)   Delete rule for a referential constraint:
  • CASCADE

  • SET NULL

  • NO ACTION

STATUS VARCHAR2(8)   Enforcement status of the constraint:
  • ENABLED

  • DISABLED

DEFERRABLE VARCHAR2(14)   Indicates whether the constraint is deferrable (DEFERRABLE) or not (NOT DEFERRABLE)
DEFERRED VARCHAR2(9)   Indicates whether the constraint was initially deferred (DEFERRED) or not (IMMEDIATE)
VALIDATED VARCHAR2(13)   Indicates whether all data obeys the constraint (VALIDATED) or not (NOT VALIDATED)
GENERATED VARCHAR2(14)   Indicates whether the name of the constraint is user-generated (USER NAME) or system-generated (GENERATED NAME)
BAD VARCHAR2(3)   Indicates whether this constraint specifies a century in an ambiguous manner (BAD) or not (NULL). To avoid errors resulting from this ambiguity, rewrite the constraint using the TO_DATE function with a four-digit year.

See Also: the TO_DATE function in Oracle Database SQL Language Reference and Oracle Database Advanced Application Developer's Guide

RELY VARCHAR2(4)   Indicates whether an enabled constraint is enforced (RELY) or unenforced (NULL)

See Also: the constraints in Oracle Database SQL Language Reference

LAST_CHANGE DATE   When the constraint was last enabled or disabled
INDEX_OWNER VARCHAR2(30)   Name of the user owning the index
INDEX_NAME VARCHAR2(30)   Name of the index (only shown for unique and primary-key constraints)
INVALID VARCHAR2(7)   Indicates whether the constraint is invalid (INVALID) or not (NULL)
VIEW_RELATED VARCHAR2(14)   Indicates whether the constraint depends on a view (DEPEND ON VIEW) or not (NULL)


테이블의 PK, FK등을 찾을수 있다. 테이블에서 지정되어있는 not null 여부도 이 테이블을 조회해보면 확인할 수 있다.

출처 : ORACLE DOCUMENTATION LIBRARY
728x90
반응형

+ Recent posts