首页 > 解决方案 > 如果值在 table.column 和 table.column 之间,则

问题描述

我是 SQL 的超级新手,我正在尝试做一个有这个 IRPF_TABLE 的练习:

IRPF LOWER_VALUE UPPER_VALUE PERCENTAJE

     1          0      12449   ,19       
     2      12450      20199   ,24       
     3      20200      35199    ,3        
     4      35200      59999   ,37       
     5      60000      99999   ,45    

我想做这样的事情:

DECLARE
    salary_month NUMBER(10,2) := 1000;
    salary_anual NUMBER (10,2);
    irpf_perc NUMBER (10, 2);
    irpf_to_pay NUMBER (10, 2);
    
BEGIN
    salary_anual := salary_month * 12;
    DBMS_OUTPUT.PUT_LINE(salary_month);
    IF salary_anual BETWEEN irpf_table.lower_value AND irpf_table.upper_value THEN
        SELECT percentaje INTO irpf_perc FROM IRPF_TABLE;
    END IF;
    irpf_to_pay := salary_anual * irpf_perc / 100;
    DBMS_OUTPUT.PUT_LINE(salary_anual);
    DBMS_OUTPUT.PUT_LINE(irpf_perc);
    DBMS_OUTPUT.PUT_LINE(irpf_to_pay);
END;

输出:

通知错误 - ORA-06550:línea 10, columna 39: PLS-00357: La referencia a la tabla, vista o secuencia 'IRPF_TABLE.LOWER_VALUE' no está permitida en este contexto ORA-06550: línea 10, columna 5: PL/ SQL:语句忽略 06550。00000 - “行 %s,列 %s:\n%s” *原因:通常是 PL/SQL 编译错误。*行动:

它表示在这种情况下不允许对表的引用“IRPF_TABLE.LOWER_VALUE”。我不知道我做错了什么。正如我所说,我对 SQL 完全陌生。我知道我的 IF 条件有问题,但我对此一无所知。Thnak you in Advanced

标签: sqloracleplsqloracle-sqldeveloper

解决方案


您在 IF 中引用该表,但是 - 在此上下文中未知,因此您遇到错误。也许你的意思是

SELECT percentaje 
  INTO irpf_perc 
  FROM IRPF_TABLE
  WHERE salary_anual BETWEEN lower_value AND upper_value;

too_many_rows但是 - 使用它,如果超过一个人的年薪介于上下值之间,你很可能会得到一个错误 ( )。或者,no_data_found如果没有人拥有它。

根据你想用那段代码做什么,你可以通过使用异常处理部分来处理它,或者在循环中执行它,或者将数据提取到集合中,或者其他任何方式。

当您发布了一段不起作用的代码,但错过了发布示例数据、所需输出(基于数据)和最后(但并非最不重要)解释您想要做什么(使用简单的英语)时,我们无能为力很多,除了试图猜测。


推荐阅读