본문 바로가기

SQL

(9)
[Oracle] 트리거 트리거도 프로시저 입니다. 근데 왜 굳이 트리거라고 할까요? 특정 이벤트가 발생할 때 자동으로 호출되는 프로시저를 트리거라고 부르기로 했습니다.데이터 무결성 유지 감사 및 로그 기록자동화된 비즈니스 로직 적용이런 목적으로 트리거를 활용한다고 하네요.  정리하자면 프로시저는 복잡한 비즈니스 로직을 캡슐화 하여 재사용할 때 사용하고, 트리거는 주로 데이터 변경 이벤트에 반응하여 자동으로 처리해야 하는 작업을 의미합니다. 그럼 이벤트가 뭘까요? 주로 INSERT, UPDATE, DELETE와 같은 DML작업을 말합니다.CREATE [OR REPLACE] TRIGGER trigger_name{BEFORE | AFTER} {INSERT | UPDATE | DELETE}ON table_name[FOR EACH RO..
[Oracle] 프로시저 프로시저는 자주 사용하는 SQL을 만들어 두고 필요할 때마다 호출해서 사용할 수 있습니다.  함수랑 비슷한데 함수는 결과 값을 반환하고, 프로시저는 로직을 처리하기만 하고 결과 값은 반환하지 않습니다.CREATE OR REPLACE PROCEDURE p_nameASBEGIN--- 로직END; 이게 기본 구성입니다. 매개변수 받을 수 있습니다. CREATE OR REPLACE PROCEDURE p_name( parameter1 IN data_type, parameter2 IN data_type, parameter3 IN OUT data_type)ASBEGINEND; IN - 호출할 때 입력으로 제공하는 매개변수OUT - 호출 후 결과를 반환하는 매개변수IN OUT - 호출 시 입력으로 제공되고 ..
[Oracle] 날짜 내장 함수 1. 현재 시간 SELECT SYSDATE FROM DUAL; // 24/06/15SELECT CURRENT_DATE FORM DUAL; // 24/06/15SELECT SYSTIMESTAMP FROM DUAL; // 24/06/15 00:00:00.000000000 + 09:00SELECT CURRENT_TIMESTAMP FROM DUAL; // 24/06/15 00:00:00.000000000 + 09:00 2. 날짜 형식 변경ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';ALTER SESSION SET TIME_ZONE = '09:00'; // 한국 시간 * 참고로 SYSDATE는 오라클 시스템 날짜이고, CURRENT_DATE는 TIME..
[Oracle] 숫자 내장 함수 1. ABS - 절대값SELECT ABS(35), ABS(-35) FROM DUAL; // 35, 35 2. SIGN - 양수/음수/0 확인SELECT SIGN(35), SIGN(-35), SIGN(0) FROM DUAL; // 1, -1, 0 3. ROUND - 반올림SELECT ROUND(34.35), ROUND(34.63) FROM DUAL; // 34, 35SELECT ROUND(34.352, 2), ROUND(34.637, 2) FROM DUAL; // 34.35, 34.64 4. TRUNC - 몫SELECT TRUNC(17/5) FROM DUAL; // 3 5. MOD - 나머지SELECT MOD(17,5) FROM DUAL; // 2 6. POWER - 제곱SELECT POWER(5,2) F..
[Oracle] 문자열 내장 함수 1. SUBSTR - 문자열 자르기SELECT SUBSTR('HELLO', 1,3) FROM DUAL; // 1번째부터 3개 자르기SELECT SUBSTR('HEELO',3) FROM DUAL; // 3번째부터 끝까지 자르기 SELECT SUBSTRB('안녕하세요',1,3) FROM DUAL; // 첫 3바이트 추출 // 안 * 참고로 영어는 1byte이지만 한글은 UTF-8 인코딩에서는 3byte , UTF-16 인코딩에서는 2byte를 차지합니다. 2. CONCAT - 문자열 합치기SELECT CONCAT('HE','LLO') FROM DUAL;SELECT 'HE'||'LLO' FROM DUAL; * 참고로 || 연산이 더 빠릅니다. 3. TRIM - 공백 제거SELECT LTRIM(' HELLO '..
[Oracle] 기초 (MySQL과의 소소한 차이) MySQL과 Oracle은 비슷한데 다른 부분이 몇군데 있죵.  Oracle에 대해 알아봅시다. MySQL 기초 정리 해놔서 똑같은건 뺄거고 헷갈리거나 다른것만 추가할게요. 1. 사용자 계정 생성 및 권한 부여 과정 처음에 SYS 또는 SYSTEM과 같은 관리자 계정으로 새로운 사용자 계정을 생성합니다.CREATE UWER username IDENTIFIED BY passweord; 사용자에게 필요한 권한을 부여합니다. CONNECT - 사용자가 DB에 접속할 수 있게 합니다. DB 세션을 시작할 수 있습니다.RESOURCE - DB 내에서 특정 리소스를 생성할 수 있는 권한입니다. 주로 객체 생성과 관련된 작업을 합니다.                     - 테이블 생성, 인덱스 생성, 트리거 생성,..
[MySQL] Index 이해하기 SQL에서 Index는 최적화에 아주아주 중요하다. Index는 DB의 table에 대한 검색속도를 향상 시켜주는 자료구조이다. 라고 알고는 있었지만 실 사용은 제대로 안 해봤다는 거.. 왜냐하면 DB가 크지 않으니 안 써도 별 차이를 못 느꼈겠지... 하지만 아주 중요하니 정리하고 가겠다. 영상 하나를 정리하는 게 맞는 말이긴 하다. 훨씬 많은 개념들이 있을텐데 차근차근 정리하겠다.  * 참고한 자료의 출처 먼저 밝히겠다. 기가 막히니 다들 한 번씩 보면 좋을 거 같다. (혹시 문제 되면 말해주세요)  DB 인덱스(DB index) !! 핵심만 모아서 설명합니다 !! (31분이 아깝지 않을 겁니다) (youtube.com)  1. Index 사용 이유SELECT * FROM customer WHERE ..
[MySQL] Join 알아보기 + 집합 연산 + 서브쿼리 SQL 공부할 때 Join이 들어가면 뭔가 헷갈렸었다.. 아마 지금도? 머쓱.. 뭐 써야지 하고 생각만 하고 모아놨더니 쓸게 한 바가지네.. 냅다 그림 투척 이것만 봐도 뭔지 대충은 알겠다..! 하나하나 알아보자. 먼저 예시 테이블 a1과 b1이다.1. JOIN ( == INNER JOIN == CROSS JOIN)  보통 a1과 b1에서 일치하는 key의 값을 가져올 때 어떻게 하냐?SELECT a.key FROM a1 a, b1 b WHERE a.key = b.key; 이렇게 하죠 간단하게? 이건 사실 INNER JOIN이 숨어있다..!SELECT a.key FROM a1 as a INNER JOIN b1 as b ON a.key = b.key; 이렇게 말이다..! 두둥 결과는 똑같다. 그럼 뭐다? ..