본문 바로가기

Oracle Database

(39)
[ORACLE] DB의 FUNCTION 문제 풀이 두 숫자를 제공하면 덧셈을 해서 결과값을 반환하는 함수를 정의하시오.(함수명 add_num)ACREATE OR REPLACE FUNCTION SUM_FUNC(num1 IN NUMBER, num2 IN NUMBER) RETURN NUMBER IS result NUMBER; BEGIN DBMS_OUTPUT.ENABLE; result := num1+num2; DBMS_OUTPUT.PUT_LINE(result); RETURN result; END; / SELECT SUM_FUNC(10, 20) FROM DUAL; 부서번호를 입력하면 해당 부서에서 근무하는 사원 수를 반환하는 함수를 정의하시오.(함수명 get_emp_count)CREATE OR REPLACE FUNCTION get_emp_count(deptno ..
[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..
SQL PROCEDURE(프로시져) 문제 --이름, 급여, 부서번호 입력란 EMPLOYEES 테이블에서 자료를 등록하는 SCRIPT를 작성하여라.--부서번호가 10 일때 급여를 20% 올려서 주고--시퀀스가 9000~ 9999 로 1씩 증하게 만들기 CREATE SEQUENCE TEST_SEQ --시퀀스 생성INCREMENT BY 1 -- (++,1씩 증가)START WITH 9000 -- ~ 부터 시작MAXVALUE 9900; -- ~ 끝 SET SERVEROUTPUT ON;SET VERIFY OFF; ACCEPT p_name PROMPT ' 이름 : '; --AWT 비슷 ?ACCEPT p_sal PROMPT ' 급여 : '; --AWT 비슷 ?ACCEPT p_deptno PROMPT ' 부서번호를 입력 : '; --AWT 비슷 ? DECLA..