在 PL/SQL 中显示函数
Posted
技术标签:
【中文标题】在 PL/SQL 中显示函数【英文标题】:Show Function in PL/SQL 【发布时间】:2020-05-12 10:18:22 【问题描述】:基于 EMP 和 DEPT 表:https://livesql.oracle.com/apex/livesql/file/content_O5AEB2HE08PYEPTGCFLZU9YCV.html
我需要创建一个函数来显示一个城市的总工资(我的选择是波士顿)。问题是我收到一个错误。该函数必须从匿名块中调用。
SET SERVEROUTPUT ON;
CREATE OR REPLACE FUNCTION show_sal (local dept.loc%TYPE)RETURN NUMBER AS
vval NUMBER;
BEGIN
SELECT SUM(SAL)INTO vval FROM emp INNER JOIN dept ON dept.deptno=emp.deptno
HAVING UPPER(dept.loc)=UPPER(local);
RETURN vval;
END;
/
BEGIN
DBMS_OUTPUT.PUT_LINE('Total sum of salaries ='||sal_afis('BOSTON'));
END;
/
【问题讨论】:
sal_afis
到底是什么?
显示波士顿的总工资
【参考方案1】:
您正在调用不存在的函数(或者,如果存在,那不是您发布的代码)。
如果波士顿部门至少有一名员工,您仍然会收到错误消息,因为您误用了HAVING
- 应该是WHERE
。
所以:
SQL> set serveroutput on;
SQL> create or replace function show_sal (local dept.loc%type)
2 return number
3 as
4 vval number;
5 begin
6 select sum(emp.sal)
7 into vval
8 from emp inner join dept on dept.deptno = emp.deptno
9 where upper(dept.loc) = upper(local);
10 return vval;
11 end;
12 /
Function created.
SQL> begin
2 dbms_output.put_line('Total sum of salaries = ' || show_sal('DALLAS'));
3 end;
4 /
Total sum of salaries = 11075
PL/SQL procedure successfully completed.
SQL>
【讨论】:
以上是关于在 PL/SQL 中显示函数的主要内容,如果未能解决你的问题,请参考以下文章