首页 > 解决方案 > PLSQL表单插入错误,有人可以帮助我吗?我没有线索

问题描述

我有这段代码,我想在其中添加一些插入的值,对它们求和并插入到特定的列中。但是我在一个错误之后得到一个错误。我认为这是最后一个,但我不知道。好的有人帮帮我吗?添加了包含更多信息的屏幕截图。

我的代码:

DECLARE 
BEGIN   
INSERT INTO thuiswerk_declaratie    (MNR, WNR, UREN_GEWERKT, TOTAAL_BEDRAG)
                
VALUES                  (:P8_MNR, 
                         :P8_WNR, 
                         :P8_TOTAAL_AANTAL_UREN (:P8_MAANDAG_UREN +
                                              :P8_DINSDAG_UREN +
                                              :P8_WOENSDAG_UREN +
                                              :P8_DONDERDAG_UREN + 
                                              :P8_VRIJDAG_UREN), 
                         :P8_TOTAAL_BEDRAG (:P8_TOTAAL_AANTAL_UREN * 0.2)
                    );
END;

代码和错误的打印屏幕

标签: plsqloracle-apexplsqldeveloper

解决方案


什么是“:P8_TOTAAL_AANTAL_UREN”和“:P8_TOTAAL_BEDRAG”?它们是 apex 中的绑定变量,因此它们包含一个字符串(不是函数名称)但是,查看您的代码,您似乎正在尝试在绑定变量中引用一个函数,这将给出您看到的错误。很可能这只是一个语法错误,您可以尝试一下:

DECLARE 
BEGIN   
INSERT INTO thuiswerk_declaratie    (MNR, WNR, UREN_GEWERKT, TOTAAL_BEDRAG)
                
VALUES                  (:P8_MNR, 
                         :P8_WNR, 
                         :P8_MAANDAG_UREN + :P8_DINSDAG_UREN + :P8_WOENSDAG_UREN + :P8_DONDERDAG_UREN + :P8_VRIJDAG_UREN, 
                         :P8_TOTAAL_AANTAL_UREN * 0.2
                    );
END;

如果您真的想要一个函数,那么您可以执行以下操作之一: 请注意,这些是更复杂的解决方案。

选项1:

您正在使用顶点。处理此问题的最佳实践是创建一个计算,该计算将为列 UREN_GEWERKT 计算页面项目,并为列 TOTAAL_BEDRAG 计算另一个。您的 pl/sql 块将是:

DECLARE 
BEGIN   
INSERT INTO thuiswerk_declaratie    (MNR, WNR, UREN_GEWERKT, TOTAAL_BEDRAG)
                
VALUES                  (:P8_MNR, 
                         :P8_WNR, 
                         :P8_TOTAAL_AANTAL_UREN, 
                         :P8_TOTAAL_BEDRAG 
                    );
END;

在这种情况下,您还可以使用内置表单区域为您完成所有魔法。

选项 2:

假设您有 (1) 一个 pl/sql 函数 total_hours 返回与 thuiswerk_declaratie.UREN_GEWERKT 相同数据类型的值并接受 5 个参数(一周中每天 1 个和 (2) 另一个函数 total_amount 返回相同数据类型的值作为 thuiswerk_declaratie.TOTAAL_BEDRAG 并采用 1 个参数,您可以将 pl/sql 块编写为:

DECLARE 
BEGIN   
INSERT INTO thuiswerk_declaratie    (MNR, WNR, UREN_GEWERKT, TOTAAL_BEDRAG)
                
VALUES                  (:P8_MNR, 
                         :P8_WNR, 
                         total_hours (:P8_MAANDAG_UREN +
                                              :P8_DINSDAG_UREN +
                                              :P8_WOENSDAG_UREN +
                                              :P8_DONDERDAG_UREN + 
                                              :P8_VRIJDAG_UREN), 
                         total_amount (:P8_TOTAAL_AANTAL_UREN * 0.2)
                    );
END;

推荐阅读