【问题标题】:Show Function in PL/SQL在 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 到底是什么?
  • 显示波士顿的总工资

标签: oracle function plsql


【解决方案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>

【讨论】:

    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多