问题描述
下面是我用来将值存储在 varray 中并最终返回 varray 的代码。但是我在第 12 行遇到一个错误,提示“行/列:12/8 pls-00103:在预期以下情况之一时遇到符号“EMP_TYPE”: :=。 (@%;" 我需要做哪些改进?
create or replace type emp_type AS VARRAY(25) OF VARCHAR(10);
/
create or replace function emp_sal
return emp_type
is
emp emp_type := emp_type();
l_salary number(10);
maxim number(10);
minim number(10);
BEGIN
SELECT sum(salary) INTO l_salary FROM Employee8_43;
SELECT max(salary) INTO maxim FROM Employee8_43;
SELECT min(salary) INTO minim FROM Employee8_43;
emp emp_type := emp_type(l_salary,maxim,minim);
return emp;
END;
解决方法
你很接近;可惜您没有阅读 Oracle 告诉您的内容。
行/列:12/8 PLS-00103:在期待......时遇到符号“EMP_TYPE”
它从字面上告诉你需要知道的一切:行号、列号,以及它发现了什么但期望得到其他东西。
这个:
emp emp_type := emp_type(l_salary,maxim,minim);
应该
emp := emp_type(l_salary,minim);
所以:
SQL> create or replace type emp_type as varray(25) of varchar(10);
2 /
Type created.
SQL> create or replace function emp_sal
2 return emp_type
3 is
4 emp emp_type := emp_type();
5 l_salary number(10);
6 maxim number(10);
7 minim number(10);
8 begin
9 select sum(salary) into l_salary from employee8_43;
10 select max(salary) into maxim from employee8_43;
11 select min(salary) into minim from employee8_43;
12 emp := emp_type(l_salary,minim); --> this is line #12
13 return emp;
14 end;
15 /
Function created.
SQL> select emp_sal from dual;
EMP_SAL
-------------------------------------------------------------------------
EMP_TYPE('29025','5000','800')
SQL>