【问题标题】:Getting employee compensation records using PL/SQL function使用 PL/SQL 函数获取员工薪酬记录
【发布时间】:2017-03-31 07:49:54
【问题描述】:

我是 stackoverflow 的新手,也是 PL/SQL 的新手。我正在研究一些 PL/SQL 问题并试图解决这个问题。

基本上,我想创建一个名为 GET_ANNUAL_INCOME 的 PL/SQL 函数来返回指定员工的年薪,根据这个公式根据员工的月薪和佣金计算得出:

  annual_ income = salary*12 +(commission_pct*salary*12)

GET_ANNUAL_COMPN 函数应该接受一个参数——员工 ID,并使用针对 er.employees tbl 的适当查询来计算该员工的年收入。我想在select语句中使用上面的公式得到年薪

我已经创建了函数 - (正确吗?)

CREATE FUNCTION GET_ANNUAL_INCOME (iEmpId IN INT) 
RETURN FLOAT 
IS annual_income FLOAT;

BEGIN  

SELECT salary *12 +(commission_pct*salary*12) 
INTO annual_income
FROM Employee 
WHERE EmpId = iEmpId;
RETURN(annual_income);

END;

问题的第二部分是我想弄清楚的。有没有人可以帮助我或指导我。

【问题讨论】:

  • 运行函数时会发生什么?您可以编辑您的问题以添加此信息。
  • 尝试命名参数empid,并在SQL中加上函数名作为前缀,所以“WHERE EmpId = get_annual_income.EmpId”。您不会因为所有/部分参数都以字母为前缀而带来不便。
  • 查询本身是否给出了正确的结果?顺便说一句,PL/SQL 中的float 只是一个synonym for number,所以你不妨使用number;并且您不需要围绕return 表达式的括号(它们只会被编译器忽略),或者就此而言,大写字母。虽然我在吹毛求疵,但对齐是一种有用的技术,通常用于指示代码的依赖结构。

标签: sql database oracle plsql


【解决方案1】:

你的函数看起来不错!!!

您可以根据需要添加异常块,以便在运行时不会遇到意外错误。

可以这样做

创建或替换 ...

返回..

异常 当别人那时 log_error_in_table 结尾; /

【讨论】:

    【解决方案2】:

    看起来不错。

    您现在可以查询特定的 empid

    select GET_ANNUAL_INCOME(3) from dual;
    

    或一组empid

    select GET_ANNUAL_INCOME(empid) from employee;
    

    【讨论】:

    • 如果 empid 来自不同的表怎么办?这将如何影响代码?
    • @Jasoncmzx,没有效果。您可以在任何您喜欢的查询中使用它(SELECT、WHERE、ORDER BY 等)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多