본문 바로가기

Oracle Database /SQL

(32)
[ORACLE] DB의 FUNCTION (함수) 대부분 SELECT 절에서 사용할 시에는 주로 FUNCTION을 사용한다.SELECT를 제외한 부분에서는 PROCEDURE을 사용한다.FUNCTION은 INSERT, DELETE, UPDATE에서는 사용하지 않는다.FUNCTION은 리턴값을 갖지만 INSERT,DELETE, UPDATE는 리턴값이 없기 때문 DROP FUNCTION FC_UPDATE_SAL; CREATE OR REPLACE FUNCTION FC_UPDATE_SAL(v_empno IN NUMBER) RETURN NUMBER IS v_sal EMPLOYEES.SALARY%TYPE; -- v_sal NUMBER := 0 도 가능 BEGIN SELECT SALARY * 1.1 INTO v_sal --v_sal 에 값을 대입 FROM EMPLOY..
[ORACLE] DB의 TRIGGER(트리거) FUNCTION과 PROCEDURE은 사용자가 정의한 후에 필요할때 사용자의 의해 수동적으로 호출되지만 TRIGGER 는 쿼리가 실행될 때 자동적으로 실행된다.TRIGGER의 생성CREATE OR REPLACE TRIGGER T BEFORE INSERT OR UPDATE OF SALARY, DEPARTMENT_ID OR DELETE ON EMPLOYEES FOR EACH ROW BEGIN DBMS_OUTPUT.ENABLE; CASE WHEN INSERTING THEN DBMS_OUTPUT.PUT_LINE('INSERT'); WHEN UPDATING('SALARY') THEN DBMS_OUTPUT.PUT_LINE('UPDATE SALARY'); WHEN UPDATING('DEPARTMENT_ID') THE..
SQL PL(Trigger) /* Trigger : 촉발시키다 자동호출 == callback 함수 Procedure, Function, Trigger : PL의 3대요소 호출되는 시점 전까지 대기상태이다. */ CREATE OR REPLACE TRIGGER triger_testBEFOREUPDATE ON departmentsFOR EACH ROW BEGINDBMS_OUTPUT.PUT_LINE('변경 전 컬럼 값 : ' || :old.department_name); -- 창이 뜨면 그냥 enter로 넘어가자DBMS_OUTPUT.PUT_LINE('변경 후 컬럼 값 : ' || :new.department_name);END; / SET SERVEROUTPUT ON; UPDATE departments SET department_name =..
SQL PL(FUNCTION) /* FUNCTION 데이터베이스 객체로 존재. 필요할 때마다 호출해서 사용할 수 있다 내장 프로시저(PROCEDURE) - INSERT, DELETE, SELECT, UPDATE 함수(FUNCTION) - SELECT */ -- 입력한 값으로부터 10%의 세율을 취득하는 함수CREATE OR REPLACE FUNCTION tax(p_value IN NUMBER) RETURN NUMBERISBEGIN RETURN(p_value * 0.1);END;/ SELECT tax(10000) FROM DUAL; -- SCOTT-- 급여와 커미션을 합쳐서 세금 계산 FUNCTION NVL()CREATE OR REPLACE FUNCTION tax2(p_sal IN EMP.SAL%TYPE, p_bonus IN EMP.C..
SQL PL(Cursor) -- Cursor/* : 저장 주소 공간 -> Oracle Pointer 암시적 커서 : 자동생성 SQL%ROWCOUNT : ROW의 수 SQL%FOUND : ROW가 한개 이상일 경우 SQL%NOTFOUND : ROW가 0개일 경우 명시적 커서 : 수동생성*/ CREATE OR REPLACE PROCEDURE Implicit_Cursor (p_empno IN employees.employee_id%TYPE)IS v_sal EMPLOYEES.SALARY%TYPE; v_update_row NUMBER; BEGIN SELECT SALARY INTO v_sal FROM EMPLOYEES WHERE employee_id = p_empno; -- 검색된 데이터가 있는 경우 IF SQL%FOUND THEN DBMS..
SQL PL(3) -- update_sal 프로시저는 사원번호를 입력 받아서 급여를 인상CREATE OR REPLACE PROCEDURE update_sal(v_empno IN NUMBER)ISBEGIN UPDATE EMPLOYEES SET SALARY = salary * 1.3 WHERE EMPLOYEE_ID = v_empno; END update_sal;/ SELECT *FROM EMPLOYEES; EXECUTE UPDATE_SAL(100); CREATE OR REPLACE PROCEDURE emp_info(p_empno IN employees.employee_id%TYPE)IS v_empno employees.employee_id%TYPE; v_ename employees.first_name%TYPE; v_sal e..
[ORACLE] DB의 PROCEDURE(프로시져) 특별한 작업을 수행하는 이름이 있는 PL/SQL Block이다매개변수를 받고 반복적으로 수행 할 수 있는 Block이다.이클립스에서는 수행되지 않는다!!Procedure의 생성UPDATE SAL PROCEDURE의 생성사원번호를 입력받아 급여를 수정하는 프로시져CREATE OR REPLACE PROCEDURE update_sal(v_empno IN NUMBER) IS BEGIN UPDATE EMPLOYEES SET SALARY = SALARY*1.1 WHERE EMPLOYEE_ID=v_empno; COMMIT; END update_sal; / v_empno : NUMBER의 타입을 갖는 인자값을 나타낸다.Procedure의 실행EXECUTE update_sal(100); EXECUTE 실행 명령을 통해 ..
[ORACLE] DB의 PL/SQL Procedure Language Extension to SQL 의 약자이다.데이터 베이스 상에서 반복문( while, for ), 제어문( if )등을 지원한다.​ PL/SQL 의 구성선언부 (선택)실행부(필수)예외처리부(선택)DECLARE 정의문( 선언부 ) BEGIN 실행문( 실행부 ) EXCEPTION 예외 처리문( 예외 처리부 ) END; / PL/SQL 의 사용SET SERVEROUTPUT ON; -- 출력을 가능하도록 해준다. DECLARE -- 선언부 V_NAME VARCHAR2(30) := 'PL/SQL'; BEGIN -- 실행부 DBMS_OUTPUT.PUT_LINE('오라클과' || V_NAME); END; -- 종료 / -- 항상 이 문자를 마지막으로 해주어야 함 SET SERVERO..