create or replace function manager_avgsal( vjob emp.job%type) return number is type sal_table_type is table of emp.sal%type index by binary_integer; sal_table sal_table_type; i binary_integer:=0; total number:=0; begin for k in (select sal from emp where job=vjob) loop i:=i+1; sal_table(i):=k.sal; total:=total+sal_table(i); end loop; return(total/i); end; /
위 구문은 scott 계정의 emp 테이블에서 직업(job컬럼)이 manager인 사람들의 급여의 평균을 구하기 위한
저장함수(function)입니다.
제 의도는 다음과 같이 실행하기 위해 execute :var_avg:=manager_avgsal('MANAGER')
---var_avg 는 바인드 변수입니다.---
vjob이라는 매개변수로 manager를 입력받아서
저장함수의 begin 부분에서 for문으로 직업이 manager인 사람의 급여를 모두 조회하고
이를 차례차례 테이블 타입변수에 저장하고 이를 total이라는 number형 변수에 더한 후
리턴할때에 total을 i로 나누면 급여의 평균이 나오지 않을까 생각했는데 실행하면
컴파일은 되지만 에러가 발생합니다.
에러가 발생하는 이유는 무엇일까요?
변수선언은 is문 뒤에 하는것으로 알고 있는데 맞는지요 ?
테이블변수가 사실상은 number형 변수를 담는다 할지라도 테이블타입으로 선언된 변수와
number형 변수는 상호간의 연산이 되지는 않는것인가요 혹시 ?
고수님들의 조언 부탁드립니다.