首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql raise_salary过程

sql raise_salary过程
EN

Stack Overflow用户
提问于 2015-03-28 14:49:40
回答 2查看 118关注 0票数 1

我正在尝试创建一个pl/sql程序,该程序将从一个表中提高管理人员的薪资,如果薪资高于3000,则必须将其设置为3000,但我似乎无法做到这一点。我必须使用o程序,然后从匿名块调用它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-30 06:40:28

在匿名块中,您要为每个经理调用该过程。在这个过程中,你把每个经理的工资提高了500。当街区退出的时候,你的经理们将会得到相当可观的加薪!

第一步是决定是在块中还是在过程中执行每个管理器的循环。第二步是,如果您希望在经理收入超过3000的情况下引发异常,那么您必须检查经理的收入是否超过3000。检查NULL,但仅此而已。不,异常处理程序中的签入不算在内。要达到这一目标,工资必须是零。

在本例中,我选择执行过程中的所有循环。它需要知道的是哪种工作类型得到加薪和加薪的数额。

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE Raise_Sal( Target_Job emp.JOB%TYPE, Amount NUMBER ) AS
    Max_Sal       Constant Number := 3000; -- Could also be passed in
    Sal_Null      Exception;
    Sal_Too_Big   Exception;
    pragma exception_init( Sal_Null, -20101 );
    pragma exception_init( Sal_Too_Big, -20102 );

    CURSOR C1 IS
        SELECT  ID, Sal
        FROM    Emp
        WHERE   JOB = Target_Job
        FOR UPDATE OF Sal; -- NOWAIT is redundant for cursors
BEGIN
    FOR Emp IN C1 Loop BEGIN
       IF Emp.Sal IS NULL THEN
          Raise_Application_Error( -20101, 'Salary is missing' );
       Elsif Emp.Sal > Max_Sal THEN
          Raise Sal_Too_High;
       Else
          UPDATE Emp SET Sal = Curr_Sal + Amount WHERE CURRENT OF C1;
       End If;
    END;
    Exception
        WHEN Sal_Too_Big THEN
            UPDATE Emp SET Sal = Max_Sal WHERE CURRENT OF C1;
        WHEN Others THEN
            Raise;
    END loop;
END Raise_Sal;
/

DECLARE
  V_Amount Constant Number := 500;
BEGIN
    raise_sal( 'MANAGER', V_Amount );
end;
/

这不是生产质量代码。首先,我会通过最高工资金额,这样这个程序就可以用于"SalesClerk“或"VicePresident”或"SQLDeveloper“或什么东西了。我相信每一个都有不同的最大值。但你似乎只对学习技术感兴趣,所以以它为例。

此外,戈登的回答指出了一个问题,你可能还没有找到。在加薪之前,您正在检查薪资是否大于最大值。如果它最终大于更新后的最大值,该怎么办?

票数 0
EN

Stack Overflow用户

发布于 2015-03-28 14:55:02

我认为基本的update是:

代码语言:javascript
复制
UPDATE emp
    SET sal = (case when curr_sal + amount > 3000 then 3000
                    else curr_sal + amount
               end)
    WHERE job = 'MANAGER' ;

我不知道这怎么适合你的程序,这似乎太复杂了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29318520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档