PL/SQL 5: 펑션 예제

PL/SQL 5: 펑션 예제

PROCEDURE

1) 변수
   일반 변수 : 변수명 데이터형(vempno NUMBER(4))
   참조 변수 : 변수명 테이블형,컬럼명%TYPE
               변수명 테이블형%ROWTYPE
               TYPE 변수명 IS RECORD
               (
               )
               CURSOR cur_name IS
                SELECT~~~
2) 제어문
   조건문
     IF (조건문) THEN
        처리 문장(SQL)
     END IF;
 
     IF (조건문) TEHN
        처리 문장

     ELSIF (조건문) THEN
        처리 문장
    
     ELSE IF;

     IF (조건문) THEN
        처리 문장
     ELSE
        처리 문장
     END IF;

     반복문
        FOR 변수명 IN low..hi LOOP
            반복처리
        END LOOP;

        FOR 변수명 IN REVERSE low..hi LOOP
            반복처리
        END LOOP;

3) 매개변수

        IN, OUT, INOUT

4) 형식
        CREATE [OR REPLACE] PROCEDURE pro_name(매개변수)
        IS
          변수명
        BEGIN
          처리문장
        END;
 /

        FUNCTION : 리턴형을 가지고 있는 함수
              => max(), count(*)….

        형식)
             CREATE [OR REPLACE] FUNCTION func_name(매개변수)
             RETURN 데이터형
             IS
               변수명
             BEGIN
               처리
               RETURN 결과값
             END;
             /

–펑션예제 1
CREATE OR REPLACE FUNCTION emp_max_sal(
   s_deptno emp.deptno%TYPE
) RETURN NUMBER
IS
 max_sal emp.sal%TYPE;
BEGIN
 SELECT MAX(sal) INTO max_sal FROM emp WHERE deptno=s_deptno;
 RETURN max_sal;
END;
/

SELECT DISTINCT deptno,emp_max_sal(deptno) FROM emp;

——————————————————————
–펑션2

CREATE OR REPLACE FUNCTION emp_count(s_deptno emp.deptno%TYPE)
RETURN NUMBER
IS
 max_count NUMBER;
BEGIN
 SELECT COUNT(*) INTO max_count
 FROM emp
 WHERE deptno=s_deptno;
 RETURN max_count;
END;
/

SELECT DISTINCT deptno,emp_count(deptno)
FROM emp;

———————————-
–펑션3
CREATE OR REPLACE FUNCTION get_dname(s_empno emp.empno%TYPE)
RETURN VARCHAR2 IS emp_dname dept.dname%TYPE;
BEGIN
 SELECT dname INTO emp_dname FROM dept WHERE deptno=(SELECT deptno FROM emp WHERE empno=s_empno);
 RETURN emp_dname;
END;
/

SELECT empno,ename,get_dname(empno) FROM emp;

–IN: 프로시저에 전달하는 역할
–OUT: 프로시저로부터 값을 얻어오는 역할