在 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 中显示函数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pl/SQL 函数在 LOV 项中列出数字(例如从 1 到 20)?返回值与显示值相同

什么是PL/SQL

PL/SQL 加速长函数

vsize 函数不能与 PL/SQL 中的修剪函数一起使用

pl/sql函数和过程

如何从 Javascript 函数中调用 PL/SQL 变量?