안녕하세요 PL/SQL 공부중인 학생입니다!
부서별로 제일 높은급여와 제일 낮은 급여를 뺀 급여차를 출력하는 함수를 만들고싶은데요.
함수 매개변수로 부서번호를 받아서 그 부서의 급여차를 빼는 함수는 만들었는데
매개변수를 받지않고 함수 내에서 커서를 이용해서 모든 부서별 급여차를 출력하는 함수는 자꾸 에러가 뜨네요ㅠㅠ
CREATE OR REPLACE FUNCTION sal_test
return NUMBER
IS
CURSOR c1
IS
SELECT deptno, SAL
FROM employees;
vno employees.deptno%TYPE;
sal1 employees.sal%TYPE;
BEGIN
OPEN c1;
SELECT max(sal)-min(sal) INTO sal1
FROM EMPLOYEES
group by deptno;
RETURN sal1;
LOOP
FETCH c1 INTO vno ,sal1;
EXIT WHEN c1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(vno||' '||sal1);
END LOOP;
CLOSE c1;
END;
/
함수 컴파일 할때는 잘 됐다가
select sal_test() from dual;로 출력하려하면
ORA-01422: 실제 인출은 요구된 것보다 많은 수의 행을 추출합니다
ORA-06512: "SCOTT.SAL_TEST", 13행 라는 에러가 뜹니다...
뭐가 잘못된건지도 모르겠어서 질문드립니다ㅜㅜ
1. SELECT ~ INTO 구문의 위치 및 사용법이 틀렸네요.
- LOOP 안에서 c1 으로 부터 받아온 부서번호를 조건으로 줘야죠.
2. 함수에 대한 이해가 필요합니다.
- 함수는 1개의 결과값을 리턴합니다.
- 루프 돌면서 계속해서 값을 리턴할 수는 없겟죠.
3. 여러개의 결과값을 받는 함수를 만들려면?
- 이런 방식으로는 안됩니다.
- http://gurubee.net/article/11403