본문 바로가기

DataBase/PL SQL

(12)
11.트리거(Trigger) 트리거(Trigger)란? 특정 테이블의 데이터에 변경이 이루어 졌을 때, 자동으로 다른 어떤 작업이 함께 수행되도록 설정하는 것 자동으로 파생되는 작업이 이루어 져서 굉장히 편하다 데이터 값 받아오는 방법 INSERT :OLD.컬럼 → NULL, :NEW.컬럼→ 입력 값 UPDATE :OLD.컬럼 → 변경전 값, :NEW.컬럼→변경후 값 DELETE :OLD.컬럼 → 삭제전 값,:NEW.컬럼→ NULL -생성 create or replace trigger 트리거이름 After DML질의문 ON 해당되는테이블 (FOR EACH ROW) BEGIN ~ END; ex) CREATE OR REPLACE TRIGGER trg_01 AFTER INSERT ON EMP11 BEGIN DBMS_OUTPUT.PUT_L..
10.패키지(Package) : 관련있는 프로시저/함수를 효율적으로 관리하기 위해 모듈화 시킨 후 배포하기 위해 순서 1.패키지 선언 2.본문정의 3.실행 패키지명.프로시저명(or함수명)() -선언 CREATE OR REPLACE PACKAGE 패키지이름 IS PROCEDURE 정의 (내용없이 시그너처만); FUNCTION 정의 (내용없이 시그너쳐만); END; ex) --패키지 선언 CREATE OR REPLACE PACKAGE my_package IS PROCEDURE getEmployee(in_id in employees.employee_id%type, out_id OUT number, out_name out employees.first_name%type, out_salary out employees.salary%type); FUNCTION getSalary(p_no employees.employee_id%T..
9.FUNCTION (프로시저에 비해 좀 더 유연하게 사용 가능) 리턴값 반환 받을 때에 프로시저와 달리 SQL 쿼리에서 직접 사용 가능!! FUNCTION 선언 CREATE OR REPLACE FUNCTION 함수명(매개변수 타입) RETURN 타입만 IS 정의 선언부(declare없이) BEGIN 사용 RETURN 값; END; CREATE OR REPLACE FUNCTION getSalary(p_no Number) return number is v_salary number; begin select salary into v_salary from employees where employee_id=p_no; return v_salary; end; 실행시 SELECT getSalary(100) FROM dual;
8-2. 프로시저(PROCEDURE) 반환값 받을 때 out 이용!! (실행시킬 때 PLSQL이 필요하다 변수하나 선언한 후에 프로시저 실행시켜주면서 값을 받는다) CREATE OR REPLACE PROCEDURE 프로시저명(이름 OUT 타입) IS 정의문 -리턴값 주는 프로시저 생성 create or replace PROCEDURE my_new_job_pro2( p_job_id in jobs2.job_id%type, p_job_title in jobs2.job_title%type, p_min_salary in NUMBER:=1000, p_max_salary in NUMBER, p_result OUT NUMBER ) IS chk_cnt NUMBER; BEGIN SELECT COUNT(*) INTO chk_cnt from jobs2 where job_id=p..
8-1. 프로시저(PROCEDURE) 파라미터 사용 -제일 중요!! WHY?? : 자주 사용하는 PL/SQL 블록을 재사용하기 위해 모듈화한 것 생성1. (파라미터 받을 때 in 사용) CREATE OR REPLACE PROCEDURE 프로시저이름(매개변수 IN 데이터타입) IS 내용 (선언부, 실행부) 매개변수가 있으면 매개변수 이용해서 할 수 있도록 실행 EXECUTE 프로시저이름(값); EX) CREATE OR REPLACE PROCEDURE listByDeptno(p_deptno IN employees.department_id%TYPE) IS CURSOR employee_cursors IS SELECT * FROM employees WHERE department_id=p_deptno; employee_record employee_cursors%ROWTYPE; BE..
7. 커서(CURSOR) 선언 : CURSOR 커서이름 IS 다중로우를 가진 쿼리문 커서데이터 열 때 (LOOP 이용 OR FOR문 이용) EX1) LOOP 이용 (OPEN CURSOR, CLOSE CURSOR로 시작과 끝, FETCH 사용 (SELECT처럼 쓰는건가??) Declare CURSOR employee_cursors IS SELECT employee_id, first_name, salary From employees; employee_record employee_cursors%ROWTYPE; v_sumSal Number; BEGIN v_sumSal:=0; OPEN employee_cursors; LOOP FETCH employee_cursors INTO employee_record.employee_id, employ..
6. 사용자 정의 예외 : 사용자가 임의의 예외를 정의하고 강제로 예외를 발생시켜서 확인 DECLARE 이용 예외 정의 사용자정의예외명 EXCEPTION; BEGIN IF 조건문 THEN RAISE 사용자정의예외명; END IF; EXCEPTION WHEN 사용자예외정의 THEN 처리 메세지 END; DECLARE e_user_exception Exception; cnt NUMBER:=0; BEGIN SELECT COUNT(*) INTO cnt FROM EMPLOYEES WHERE DEPARTMENT_ID=40; IF cnt
5.반복문 (LOOP, WHILE, FOR) 5-1. LOOP LOOP반복문 (cursor에서 사용 된다) EX1) LOOP~ END LOOP; BEGIN LOOP EXIT WHEN i>10; DBMS_OUTPUT.PUT_LINE(i); i:=i+1; END LOOP; END; 5-2. WHILE 반복문 EX2) WHILE 조건 LOOP~ END LOOP; DECLARE i NUMBER:=1; BEGIN WHILE i