【问题标题】:How to return the salary class for an employee given the employee’s EmployeeID value as an IN parameter [duplicate]给定员工的 EmployeeID 值作为 IN 参数,如何返回员工的薪水等级 [重复]
【发布时间】:2018-05-06 22:55:41
【问题描述】:

尝试根据薪水按类别对每个员工进行分类。调用函数时没有输出。

数据: A 类:

B 类:> 10,000 和

C 级:> 20,000

CREATE OR REPLACE PROCEDURE DisplaySalary2(p_EmployeeID
IN CHAR) IS
v_Salary NUMBER(10,2);

BEGIN
SELECT Salary INTO v_Salary FROM Employee
WHERE EmployeeID = '88777';
IF v_Salary <= 10000 THEN
     DBMS_OUTPUT.PUT_LINE ('Class A');
 ELSIF v_Salary > 10000 AND v_Salary <= 20000 THEN
DBMS_OUTPUT.PUT_LINE ('Class B');
ELSE
DBMS_OUTPUT.PUT_LINE ('Class C');
END IF;
EXCEPTION
 WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE ('Employee not found.'); 
END;
/


/*Calling DisplaySalary 2 */
DECLARE
v_SalaryOutput CHAR (10);
BEGIN
DisplaySalary2(v_SalaryOutput);
DBMS_OUTPUT.PUT_LINE(v_SalaryOutput);
END;

/

【问题讨论】:

  • 在执行你的 PL/SQL 块之前使用SET SERVEROUTPUT ON; 来调用你的过程。

标签: oracle plsql


【解决方案1】:

您已经编写了一个 plsql 过程并说您正在调用一个函数。如果您在过程中显示所有内容,则不需要通过返回值将其用作函数。

还要注意 cmets 以了解如何使用参数 p_employeeId。您似乎对这些值进行了硬编码。

CREATE OR REPLACE PROCEDURE DisplaySalary2(p_EmployeeID
IN CHAR) IS

v_Salary NUMBER(10,2);

BEGIN
SELECT Salary INTO v_Salary FROM Employees
WHERE EmployeeID = '88777'; -- You should use - WHERE EmployeeID = p_EmployeeID;
IF v_Salary <= 10000 THEN
     DBMS_OUTPUT.PUT_LINE ('Class A');
ELSIF v_Salary > 10000 AND v_Salary <= 20000 THEN
DBMS_OUTPUT.PUT_LINE ('Class B');
ELSE
DBMS_OUTPUT.PUT_LINE ('Class C');
END IF;
EXCEPTION
 WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE ('Employee not found.'); 
END;
/

并且在调用过程时,由于您没有任何OUT 参数,因此只需像这样调用它。

SET SERVEROUTPUT ON
DECLARE
BEGIN
DisplaySalary2('88777');
END;

/

如果要将块转换为 plsql 函数,则必须使用此链接中解释的 create or replace function ..return returntype 语法。

Create function

【讨论】:

    猜你喜欢
    • 2018-10-18
    • 2020-05-12
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多