728x90
반응형
728x90
반응형

 

Oracle 시노님 사용방법

 

 

시노님 사용순서

1. 테이블 소유하고 있는 계정에서 특정계정에게 권한부여

GRANT 권한명 ON 소유유저명.테이블명 TO 권한받을유저;

ex) GRANT SELECT ON TEST.TEST_TABLE TO TEST2;

 

2. 사용하고자하는 계정(권한받을유저)에서 소유하고있는계정과 같은 테이블로 시노님부여

CREATE SYNONYM 시노님명 FOR 유유저명.테이블명;

ex) CREATE SYNONYM TEST_TABLE FOR TEST.TEST_TABLE;

 

 

 

728x90
반응형

'DB > Oracle' 카테고리의 다른 글

[Oracle] 트리거 Trigger Example  (0) 2024.03.12
[Oracle] TO_CHAR 함수 Example  (0) 2024.03.11
[Oracle] CONNECT BY LEVEL Example  (0) 2024.03.11
[Oracle] lNSTR 함수 Example  (0) 2024.03.11
[Oracle] LAST_DAY 함수 Example  (0) 2024.03.11
728x90
반응형

 

Oracle 트리거 사용방법

 

 

트리거란 ?

테이블에 대한 이벤트(INSERT, UPDATE, DELETE)에 반응하여 자동으로 실행되는 작업

 

 

트리거 문법

  • [OR REPLACE] : 등록된 트리거가 있을 경우, 새로 생성하는 트리거로 변경
  • BEFORE or AFTER : 쿼리 트리거이벤트가 발생하기 전, 후 지정
  • INSERT or UPDATE or DELETE : 트리거이벤트 유형을 지정
  • [FOR EACH ROW] : 각 행에 대해 트리거를 실행여부를 지정
  • [WHEN 조건] : 트리거가 실행되는 조건을 기입
  • [DECLARE 변수 선언] : 트리거 내에서 사용할 변수를 선언

 

트리거이벤트 OLD NEW
INSERT X O
UPDATE O O
DELETE O X
  • OLD 기존 데이터 (UPDATE, DELETE의 데이터)
  • NEW 신 데이터 (INSERT, UPDATE의 데이터)
  • :OLD.컬럼명 / :NEW.컬럼명

 

 

트리거 예시

테이블이 이벤트가 발생하였을 경우

CREATE OR REPLACE TRIGGER "TR_TEST_LOG"
   AFTER DELETE OR INSERT ON TEST_TABLE
   FOR EACH ROW
BEGIN
   IF INSERTING THEN
      INSERT INTO TEST_TABLE_LOG
                ( 
                     COL_A
                   , COL_B

                ) VALUES (
                   , :NEW.COL_A
                   , :NEW.COL_B
                )
           ;

  ELSIF DELETING THEN
      INSERT INTO TEST_TABLE_LOG
                ( 
                     COL_A
                   , COL_B

                ) VALUES (
                   , :OLD.COL_A
                   , :OLD.COL_B
                )
           ;
    END IF;
END;

 

테이블의 컬럼에 이벤트가 발생하였을 경우

CREATE OR REPLACE TRIGGER "TR_TEST_LOG"
   AFTER DELETE OR INSERT OR UPDATE OF T1, T2 ON TEST_TABLE
   FOR EACH ROW
BEGIN
   IF INSERTING THEN
      INSERT INTO TEST_TABLE_LOG
                ( 
                     COL_A
                   , COL_B

                ) VALUES (
                   , :NEW.COL_A
                   , :NEW.COL_B
                )
           ;

  ELSIF UPDATING THEN
  
      DELETE FROM TEST_TABLE_LOG
       WHERE COL_A = :NEW.COL_A
         AND COL_B = :NEW.COL_B
     ;
      
      INSERT INTO TEST_TABLE_LOG
                ( 
                     COL_A
                   , COL_B

                ) VALUES (
                   , :OLD.COL_A
                   , :OLD.COL_B
                )
           ;
           
  ELSIF DELETING THEN
       DELETE FROM TEST_TABLE_LOG
        WHERE COL_A = :NEW.COL_A
          AND COL_B = :NEW.COL_B
       ;           
       
    END IF;
END;

 

 

 

728x90
반응형

'DB > Oracle' 카테고리의 다른 글

[Oracle] 시노님 Synonym Example  (0) 2024.03.12
[Oracle] TO_CHAR 함수 Example  (0) 2024.03.11
[Oracle] CONNECT BY LEVEL Example  (0) 2024.03.11
[Oracle] lNSTR 함수 Example  (0) 2024.03.11
[Oracle] LAST_DAY 함수 Example  (0) 2024.03.11
728x90
반응형

 

Oracle TO_CHAR 함수 사용방법

 

 

TO_CHAR 함수 - 날짜, 숫자등의 값을 문자열로 변경

 

 

날짜포맷 변경하기

포맷 설명 예제






"text"
결과에 포함되는 구두점과 텍스트 SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') FROM DUAL;
→ 20220524

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL;
→ 2022-05-24

SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD') FROM DUAL;
→ 2022/05/24

SELECT TO_CHAR(SYSDATE, 'YYYY,MM,DD') FROM DUAL;
→ 2022,05,24

SELECT TO_CHAR(SYSDATE, 'YYYY.MM.DD') FROM DUAL;
→ 2022.05.24

SELECT TO_CHAR(SYSDATE, 'YYYY;MM;DD') FROM DUAL;
→ 2022;05;24

SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') FROM DUAL;
→ 2022/05/24 17:34:40

SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') FROM DUAL;
→ 2022년 05월 24일
DL 날짜 형식 값을 반환 
※ NLS_DATE_FORMAT 의해 결정됨
SELECT TO_CHAR(SYSDATE, 'DL') FROM DUAL;
→ 2022년 5월 24일 화요일
YYYY
SYYYY
년 4자리
S를 지정하면 기원전의 날짜의 선두에 부의 부호(-)가 붙는다.
SELECT TO_CHAR(SYSDATE, 'YYYY') FROM DUAL;
→ 2022
YYY
YY
Y
년 3, 2, 1자리 SELECT TO_CHAR(SYSDATE, 'YY') FROM DUAL;
→ 22 -- 2022년이므로 뒤의 2자리인 22만 반환
RR 00~49는 2000~2049년
50~99는 1950~1999년을 의미한다.
SELECT TO_CHAR(SYSDATE, 'RR') FROM DUAL;
→ 22
Q 분기(1~4)
(1:1~3월, 2: 4~6월, 3: 7~9월, 4: 10~12월)
SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL;
→ 2 -- 2분기
MM 월(01~12, 1월 : 01) SELECT TO_CHAR(SYSDATE, 'MM') FROM DUAL;
→ 05
D 요일(일→1, 토→7)
※ 세션의 NLS 지역에 따라 다름
SELECT TO_CHAR(SYSDATE, 'D') FROM DUAL;
→ 3
DD 일(1~31) SELECT TO_CHAR(SYSDATE, 'DD') FROM DUAL;
→ 24
DDD 년의 날(1~366) SELECT TO_CHAR(SYSDATE, 'DDD') FROM DUAL;
→ 144 -- 365일 기준 144일
HH
HH12
시간(1~12) SELECT TO_CHAR(SYSDATE, 'HH') FROM DUAL;
→ 04 
HH24 시간(0~23) SELECT TO_CHAR(SYSDATE, 'HH24') FROM DUAL;
→ 16
MI 분(0~59) SELECT TO_CHAR(SYSDATE, 'MI') FROM DUAL;
→ 53
SS 초(0~59) SELECT TO_CHAR(SYSDATE, 'SS') FROM DUAL;
→ 19
SSSSS 오전 0시부터 경과한 초(0~86399) SELECT TO_CHAR(SYSDATE, 'SSSSS') FROM DUAL;
→63417
FF[1..9] - 밀리세컨드
- FF 뒤에 1 - 9 숫자를 설정하여 반환되는 날짜/시간 값의 밀리세컨드 부분의 자릿수를 지정 
※ 숫자를 지정하지 않으면 6으로 인식
- 타임스탬프 형식 및 기간 형식에서는 유효하지만 DATE형식에서는 유효하지 않음
SELECT TO_CHAR(SYSTIMESTAMP, 'SS.FF3') from DUAL;
→ 15.791
DY 요일(MON, 월 등) SELECT TO_CHAR(SYSDATE, 'DY') FROM DUAL;
→ 화
DAY 요일(Monday, 월요일 등) SELECT TO_CHAR(SYSDATE, 'DAY') FROM DUAL;
→ 화요일
MON 달 이름의 약어(1월~12월, JAN~DEC) SELECT TO_CHAR(SYSDATE, 'MON') FROM DUAL;
→ 5월
MONTH 달 이름 (1~12월, JANUARY~DECEMBER) SELECT TO_CHAR(SYSDATE, 'MONTH') FROM DUAL;
→ 5월
AM 오전, 오후
※ oracle 설정에 따라 AM,PM으로 반환
SELECT TO_CHAR(SYSDATE, 'AM') FROM DUAL;
→ 오후
WW 년의 주수(01~53)
첫 번째 주는 1월 1일로 시작, 7일에 종료
SELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL;
→ 21 -- 1년 기준 21주
W 월의 주수(1~5)
첫 주는 그 달의 1일로 시작, 7일에 종료
SELECT TO_CHAR(SYSDATE, 'W') FROM DUAL;
→ 4

출처 : https://kr98gyeongim.tistory.com/100

 

 

 

728x90
반응형

'DB > Oracle' 카테고리의 다른 글

[Oracle] 시노님 Synonym Example  (0) 2024.03.12
[Oracle] 트리거 Trigger Example  (0) 2024.03.12
[Oracle] CONNECT BY LEVEL Example  (0) 2024.03.11
[Oracle] lNSTR 함수 Example  (0) 2024.03.11
[Oracle] LAST_DAY 함수 Example  (0) 2024.03.11
728x90
반응형

 

Oracle CONNECT BY LEVEL 사용방법

 

 

CONNECT BY LEVEL - 계층형쿼리, LEVEL사용하여 For문처럼 사용하기

SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= N

ex) SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 7

 

 

 

 

728x90
반응형

'DB > Oracle' 카테고리의 다른 글

[Oracle] 트리거 Trigger Example  (0) 2024.03.12
[Oracle] TO_CHAR 함수 Example  (0) 2024.03.11
[Oracle] lNSTR 함수 Example  (0) 2024.03.11
[Oracle] LAST_DAY 함수 Example  (0) 2024.03.11
[Oracle] REVERSE 함수 Example  (0) 2024.03.11
728x90
반응형

 

Oracle INSTR 함수 사용방법

 

 

INSTR 함수 정의

  • java의 indexOf와 같은 기능
  • 찾는 문자 없을시 0 리턴
  • 찾는 단어의 첫번째 index 리턴
  • Default 좌측에서 우측
  • 시작위치 음수일경우 우측에서 좌측

 

 

INSTR 함수 문법

SELECT INSTR('문자열', '검색 값', [시작위치], [n번째 검색위치]) FROM DUAL;

 

 

찾는 값이 없을 경우 0 리턴

 

찾는 값이 있을 경우

ex) 

  • SELECT 'abcabc'  FROM DUAL;
  • SELECT INSTR('abcabc', 'ab')  FROM DUAL;
  • SELECT INSTR('abcdabc', 'ab', 1, 1)  FROM DUAL;
  • SELECT INSTR('abcdabc', 'ab', 1, 2)  FROM DUAL;
  • SELECT INSTR('abcdabc', 'ab', 3, 1)  FROM DUAL;
  • SELECT INSTR('abcdabc', 'ab', -1, 1)  FROM DUAL;

 

 

 

 

728x90
반응형

'DB > Oracle' 카테고리의 다른 글

[Oracle] TO_CHAR 함수 Example  (0) 2024.03.11
[Oracle] CONNECT BY LEVEL Example  (0) 2024.03.11
[Oracle] LAST_DAY 함수 Example  (0) 2024.03.11
[Oracle] REVERSE 함수 Example  (0) 2024.03.11
[Oracle] REGEXP_REPLACE 함수Example  (0) 2024.03.06
728x90
반응형

 

Oracle LAST_DAY 함수 사용방법

 

 

LAST_DAY 함수 - 해당월의 마지막날짜 구하기

SELECT LAST_DAY(날짜) FROM DUAL;

ex) 

  • SELECT LASY_DAY('20240201') FROM DUAL;
  • SELECT LASY_DAY(SYSDATE) FROM DUAL;
  • SELECT TO_CHAR(LASY_DAY(SYSDATE), 'YYYYMMDD') FROM DUAL;

 

 

 

728x90
반응형

'DB > Oracle' 카테고리의 다른 글

[Oracle] CONNECT BY LEVEL Example  (0) 2024.03.11
[Oracle] lNSTR 함수 Example  (0) 2024.03.11
[Oracle] REVERSE 함수 Example  (0) 2024.03.11
[Oracle] REGEXP_REPLACE 함수Example  (0) 2024.03.06
[Oracle] Case 표현식 Example  (0) 2024.01.18
728x90
반응형

 

Oracle REVERSE 함수 사용방법

 

 

REVERSE 함수 - 문자열 뒤집기, 문자열 역순 출력

SELECT REVERSE('문자열') FROM DUAL;

 

 

 

728x90
반응형
728x90
반응형

 

REGEXP_REPLACE 함수 Example

 

 

REGEXP_REPLACE 함수란?

REPLACE함수를 확장한 개념으로 주어진 문자열에서 특정 정규패턴을 찾아서 지정한 문자열로 변경하는 함수

 

 

REGEXP_REPLACE 문법

REGEXP_REPLACE( source_string, pattern [, replace_string [ , position [, parameters ] ] ] )

source_string

  • 검색할 컬럼명, 문자열

pattern

  • 찾고자 하는 정규식 패턴

replace_string

  • (선택) 변경하고자하는 문자열, 기본값은 빈 문자열("")

position

  • (선택) 검색시작위치, 기본값 1

parameters

  • (선택) 기본값 c
  • c - 대소문자 구분 검색
  • i - 대소문자 구분 하지 않고 검색 (구분x)
  • m - 검색조건 여러줄

 

 

정규식문법

. 하나의 문자를 의미합니다.  ".*"하면 한개이상의 문자 즉 모든 문자를 의미합니다.
$ 끝을 의미한다. AAA$ 하면 AAA로 끝나는 것을 의미한다.
\ 특수 문자를 문자로 인식할때 사용합니다.
¦ 여러 식 중에서 하나를 선택합니다. SQL의 OR조건과 같습니다. "abc¦adc"는 abc와 adc 문자열을 모두 포함한다.
^ 문자 클래스 안의 문자를 제외한 나머지를 선택한다. 예를 들면 [^abc]d는 ad, bd, cd는 포함하지 않습니다. [^a-z]는 알파벳 소문자로 시작하지 않는 모든 문자를 의미한다.
[] "["과 "]" 사이의 문자 중 하나를 선택한다. "¦"를 여러 개 쓴 것과 같은 의미이다. 예를 들면 [abc]d는 ad, bd, cd를 뜻한다. 또한, "-" 기호와 함께 쓰면 범위를 지정할 수 있다. "[a-z]"는 a부터 z까지 중 하나, "[1-9]"는 1부터 9까지 중의 하나를 의미한다.
() 여러 식을 하나로 묶을 수 있다. "abc¦adc"와 "a(b¦d)c"는 같은 의미를 가진다.
* 0개 이상의 문자를 포함한다. "a*b"는 "b", "ab", "aab", "aaab"를 포함한다.
+ "a+b"는 "ab", "aab", "aaab"를 포함하지만 "b"는 포함하지 않는다. [+ 앞 내용 기준]
 ? "a?b"는 "b", "ab"를 포함한다. [? 다음 내용 기준]
{m} "a{3}b"는 "aaab"만 포함한다.
{m,} "a{2,}b"는 "aab", "aaab", "aaaab"를 포함한다. "ab"는 포함되지 않는다.
{m, n} "a{1,3}b"는 "ab", "aab", "aaab"를 포함하지만, "b"나 "aaaab"는 포함하지 않는다
\n 1에서 9까지의 숫자를 의미
\d Matches a digit character.
\D Matches a nondigit character.
\w Matches a word character.
\W Matches a nonword character.
\s Matches a whitespace character.
\S matches a non-whitespace character.

 

Class 문법

[:alnum:] 영어와 숫자
[:alpha:] 알파벳, [A-Za-z]
[:blank:] 공백과 탭
[:digit:] 숫자
[:lower:] 소문자, [a-z]
[:punct:] 특수문자
[:space:] 공백(스페이스)
[:upper:] 대문자, [A-Z]
[가-힣] 한글전체

출처 : https://nicola-ml.tistory.com/57

 

 

REGEXP_REPLACE  사용예제

 

단어에서 모든 숫자를 특수문자(*)로 변경하기

REGEXP_REPLACE(컬럼명, '[[:digit:]]', '*')

 

숫자를 찾아 뒤에 -*를 추가하기

REGEXP_REPLACE(컬럼명, '([0-9])', '\1-#$')

 

숫자 중간에 . / IP. 삭제하기

REGEXP_REPLACE(컬럼명, '\.', '')

 

공백 N칸이상 일때 특수문자로 변경하기

( ) -> \s 사용가능 [위의 정규식문법참조]

REGEXP_REPLACE('AAA BBB', '( ){2,}', '*') AS "공백 1칸"

REGEXP_REPLACE('AAA  BBB', '( ){2,}', '*') AS "공백 2칸"

REGEXP_REPLACE('AAA   BBB', '\s{2,}', '*') AS "공백 3칸"

 

특정문자열 형태를 다른 형태 변경하기

[[:digit:]] -> \d 사용가능 [위의 정규식문법참조]

REGEXP_REPLACE(컬럼명, '([[:digit:]]{4})(\d{2})(\d{2})', '\1-\2-\3') AS "그룹뒤 문자삽입"

 

특정문자열 형태를 다른 형태 변경하기

[[:digit:]] -> \d 사용가능 [위의 정규식문법참조]

REGEXP_REPLACE(컬럼명, '([[:digit:]]{4})(\d{2})(\d{2})', '\2*\1-\3') AS "그룹뒤 문자삽입1"

REGEXP_REPLACE(컬럼명, '([[:digit:]]{4})(\d{2})(\d{2})', '\3-\2') AS "그룹뒤 문자삽입2"

REGEXP_REPLACE(컬럼명, '([[:digit:]]{4})(\d{2})(\d{2})', '&\1-\2%\3') AS "그룹뒤 문자삽입3"

 

 

 

728x90
반응형

+ Recent posts