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: 프로시저로부터 값을 얻어오는 역할