sql - 如果值在 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
解决方案
您在 IF 中引用该表,但是 - 在此上下文中未知,因此您遇到错误。也许你的意思是
SELECT percentaje
INTO irpf_perc
FROM IRPF_TABLE
WHERE salary_anual BETWEEN lower_value AND upper_value;
too_many_rows
但是 - 使用它,如果超过一个人的年薪介于上下值之间,你很可能会得到一个错误 ( )。或者,no_data_found
如果没有人拥有它。
根据你想用那段代码做什么,你可以通过使用异常处理部分来处理它,或者在循环中执行它,或者将数据提取到集合中,或者其他任何方式。
当您发布了一段不起作用的代码,但错过了发布示例数据、所需输出(基于数据)和最后(但并非最不重要)解释您想要做什么(使用简单的英语)时,我们无能为力很多,除了试图猜测。
推荐阅读
- html - 我的导航栏粘在页面的右边缘,当它在滚动时粘在顶部
- php - 如何以小时、天、周、月、年 PHP 的形式获取分钟
- php - 我怎样才能改变css的特性?
- python - Python Selenium rel=nofollow 链接
- python - 如何在 QScintilla 中实现基于缩进的代码折叠?
- wpf - XAML 属性编辑器中的 WPF Enum Flags Dependency 属性
- java - 表达式中的优先级,包括 java 中的括号和 int 类型转换
- google-apps-script - 根据匹配用新数据更新记录
- swift - Swift:本地通知提前 1 小时安排
- swift - Swift 4- http 请求发布以登录网站