【问题标题】:Stored Procedure - table column name as variable存储过程 - 表列名作为变量
【发布时间】:2013-08-22 15:00:33
【问题描述】:

我这里有一个存储过程,它从示例数据库中调用表列,但我的问题是我想将一个列名变成一个变量,以便我可以在某个条件下使用它。我的代码不起作用,但我不知道如何将其作为变量。

我想将列名 SALARY 作为变量。

这是我的代码:

CREATE PROCEDURE TAXEXEMPT ()

    DYNAMIC RESULT SETS 1
    LANGUAGE SQL

BEGIN

    DECLARE display CURSOR WITH RETURN TO CLIENT FOR

        SELECT EMPNO, LASTNAME, SALARY, SALARY AS "TAX EXEMPTION" 
        FROM EMPLOYEE 
        WHERE WORKDEPT BETWEEN 'C01' AND 'D21';

        IF ( SALARY < 15001 ) THEN
            --DO NOTHING
        ELSEIF ( SALARY >= 15001 OR SALARY <= 22000 ) THEN
            UPDATE EMPLOYEE SET "TAX EXEMPTION" = SALARY * 1.03;
        ELSEIF ( SALARY >= 22001 OR SALARY <= 32000 ) THEN
            UPDATE EMPLOYEE SET "TAX EXEMPTION" = (SALARY * 1.05) + 100;
        ELSEIF ( SALARY >= 32001 OR SALARY <= 45000 ) THEN
            UPDATE EMPLOYEE SET "TAX EXEMPTION" = (SALARY * 1.07) + 200;
        ELSE
            --DO NOTHING
        END IF; 

    OPEN display;

END

任何形式的帮助都可以,在此先感谢。

【问题讨论】:

    标签: sql stored-procedures db2


    【解决方案1】:

    你想要的是一个 CASE 表达式:

    DECLARE display CURSOR WITH RETURN TO CLIENT FOR
    
             SELECT EMPNO, LASTNAME, SALARY, 
                       CASE 
                         WHEN SALARY < 15001 THEN SALARY 
                         WHEN SALARY BETWEEN 15001 AND <= 22000 THEN SALARY * 1.03
                         WHEN SALARY BETWEEN 20001 AND <= 32000 THEN (SALARY * 1.05) + 100
                         ...
                         ELSE SALARY
                       END AS "TAX EXEMPTION" 
             FROM EMPLOYEE 
             WHERE WORKDEPT BETWEEN 'C01' AND 'D21';
    
         OPEN display;
    

    【讨论】:

    • 非常感谢。这真的帮助了我。我的困惑现在消失了。
    • 但是你知道这个流程图是什么样子的吗?
    • 我觉得它看起来像一堆用箭头连接的矩形,不是吗?不过说真的,我不认为我理解这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多