1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 12..
Trigger(트리거) 트리거란? DML(INSERT,UPDATE,DELETE)명령어가 실행 될때 수행되는 묵시적 PROCEDURE(프로시저). 즉, 예를들어 우리 넥사크로에서 onload함수에 트랜잭션을 호출하는 명령어를 넣어 폼이 켜질때 이미 트랜잭션으로 필요한 데이터들을 받아와서 폼을 실행 시키는것이나 스프링의 인터셉터와 비슷한 기능과 역할을 함. INSERT,UPDATE,DELETE 가 실행되기 전/후 에 원하는 이벤트 등을 넣어서 자동으로 유용하게 쓰는것. 트리거의 분류 SQL문 실행시기에 따른 분류 before 트리거 INSERT,UPDATE,DELETE 실행하기 전에 트리거 먼저 실행 됨 after 트리거 INSERT,UPDATE,DELETE 실행하고 난 후 트리거 실행 됨 실행시 영향을 받..
# cursor for loop(암묵적 커서) - 따로 커서를 선언하지 않아도 IN안에 SELECT문을 넣으면 자동으로 읽음 - 가장 많이 씀 CREATE OR REPLACE PROCEDURE p_emp_info (p_dept_id s_emp.dept_id%TYPE) IS BEGIN FOR emp_record IN ( SELECT last_name, salary FROM s_emp WHERE dept_id = p_dept_id ) // IN 안에 SELECT문 바로 옴 LOOP DBMS_OUTPUT.PUT_LINE(emp_record.last_name || ' ' || emp_record.salary); END LOOP; END; / # WHERE CURRENT OF DECLARE CURS..
# PL/SQL (Procedural Language/SQL) - SQL명령어에 절차적 언어(C,JAVA 등등)형식을 도입한 언어. - 변수정의, 조건처리(IF), 반복처리(LOOP, WHILE, FOR)등을 지원 [기본SY] DECLARE (안에 선언할게 없으면 생략가능) [변수,상수,CURSOR,USER_DEFINE Exception 선언] BEGIN [SQL, 반복분, 조건문실행] EXCEPTION (예외할게 없으면 생략 가능) [예외처리] END; # SUBPROGRAM - 이름이 있는 PL/SQL 블록 - 나중에 실행할 동작들을 미리 저장 종류 - PROCEDURE(동작수행),FUNCTION(값 반환),PACKAGE(연관된 프로시저 함수 묶은거) # PROCEDURE - J..
WINDOW함수 기본 문법 SUM(컬럼명) OVER( PARTITION BY [컬럼] ORDER BY [컬럼] [ASC/DESC] ROWS / RANGE BETWEEN UNBOUNDED PRECEDING / PRECEDING / CURRENT ROW AND UNBOUNDED FOLLOWING / CURRENT ROW ) -- ROW : 부분집합인 윈도우 크기를 물리적인 단위로 행 집합을 지정 -- RANGE : 논리적인 주소에 의해 행 집합을 지정 -- UNBOUNDED PRECEDING : 윈도우의 시작 위치가 첫번째 ROW -- UNBOUNDED FOLLOWING : 윈도우의 마지막 위치가 마지막 ROW -- CURRENT ROW : 윈도우의 시작 위치가 현재 ROW Temp 의 자료를 이용하여 자신..
RANK() OVER () EX) A-90점 , B-90점 C-80점 인 1등이 2명인 동일 순위인 경우 순위는 1,1,3 1등이 2명되고 3번째애가 3등으로 표시 즉, A=1등 B=1등 C=3등 ROW_NUMBER() OVER () : 제일 중요 EX) A-90점 , B-90점 C-80점 인 1등이 2명인 동일 순위인 경우 순위는 1,2,3 즉, A=1등 B=2등 C=3등 A와 B가 점수가 같지만 A가 1등인 이유는 데이터를 뽑아낼때 A의 행이 더 빨리오기때문(즉,정렬방식에따라 등수가 바뀜) 즉,함수이름처럼 ROW_NUMBER.. ROW(행)의 순위에 따라 그냥 번호를 매김. 동일 순위인 경우 1,2,3 DENSE_RANK() OVER () 중복 RANK의 수와 무관하게 numbering을 한다. EX..
LEAD 구문 형식 : 지정한 칼럼 뒤의 값을 가져옴 LEAD ( expr, offset, default ) OVER ( order BY 절 ) expr(표현식): 명시된 값을 기준으로 이후 로우의 값을 반환 offset : 생략가능, 기본값:1, 몇번째 후의 row 값을 넣을건지 default: 생략가능, off에 지정된 로우가 존재하지 않을 경우 LEAD 함수가 반환하는 기본 값 LAG 구문 형식 : 지정한 칼럼 앞의 값을 가져옴 LAG ( expr, offset, default ) OVER ( order BY 절 ) expr(표현식): 명시된 값을 기준으로 이전 로우의 값을 반환 offset : 생략가능, 기본값:1, 몇번째 후의 row 값을 넣을건지 default: 생략가능, off에 지정된 로우..
## IMPORT (DUMP 파일 계정만들어서 집어넣기) 준비물 : dump 파일을 c드라이브 밑에 넣어두자.(딴대줬다가 경로에한글있고 그러면 골치아프니꺄 걍 C나D) 1.스키마 생성 sqlplus /nolog -- sqlplus 접속 conn /as sysdba -- 관리자 로그인 create user 계정명 identified by 비밀번호; -- 계정생성(이미있는계정에 넣을꺼면 생략 가능) grant resource,dba,connect to 계정명; -- 계정에 권한주기(권한이미 있으면 생략 가능) 2.import % sql 나와서 일반 그냥 콘솔창 % cd c:// imp 계정명/비밀번호 file=파일명.dmp full=y ## EXPORT (내 파일 DUMP파일로 저정하기) 준비물 : C드라이..
※ 스크롤하면 정답 나옴 -- 1. EMP 테이블에서 부서 인원이 4명보다 많은 부서의 부서번호, 인원수, 급여의 합을 출력하라. select deptno, count(*), sum(sal) from emp group by deptno having count(*)>4 -- 2. EMP 테이블에서 가장 많은 사원이 속해있는 부서의 부서번호와 사원수를 출력하라. select deptno, count(*) from emp group by deptno having count(deptno) = (select max(count(*)) from emp group by deptno) -- 3. EMP 테이블에서 가장 많은 사원을 갖는 MGR의 사원번호를 출력하라. select mgr empno from emp ..
시퀀스(Sequence) -고유한 숫자를 자동으로 생성 -시퀀스를 생성하면 순차적으로 증가하는 칼럼을 만들 수 있다. -주로 primary key값을 사용하기위해 사용 CREATE SEQUENC SequenceName 스퀸스 사용 -NEXTVAL(증가) , CURRVAL(일정) --> NEXTVAL 최소 한번 사용 후에 사용 가능 사용가능한 곳 -INSERT 할때 value, subquery 의 select -select문의 select list (subquery 제외) -update문의 set절 뷰(view) - 하나 또는 그 이상의 테이블 데이터의 부분집합을 보기 위한 가상의 테이블 - 창문같은거 테이블의 내용중 필요한것,보고싶은것만 따로 뷰로 만들어서 손쉽게 사용 - 따로 테이블을 만들거나 조건을 ..