如何创建一个函数来使用 pl/sql 函数从表中打印员工所有工资、最高工资和最低工资的总和

问题描述

下面是我用来将值存储在 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>