【问题标题】:PLSQL form insert error, can someone help me? I have no cluePLSQL表单插入错误,有人可以帮助我吗?我没有线索
【发布时间】:2021-01-31 15:30:06
【问题描述】:

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

我的代码:

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;

Printscreen of code and error

【问题讨论】:

    标签: plsql oracle-apex plsqldeveloper


    【解决方案1】:

    什么是“: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;
    

    【讨论】:

    • 啊哈我想我明白了。所以你说的是我需要两个函数,比如 total_hours 和 total_amount。要计算 :P8_TOTAAL_AANTAL_UREN 和 :P8_TOTAAL_BEDRAG 然后返回它们?我的代码不能正常工作,因为页面项是字符串且没有变量吗?
    • 抱歉刚刚更新了我的解决方案 - 我认为您只是有语法错误。如果您只是添加值,为什么需要一个函数。如果有帮助,我可以把我的第一个答案放回去
    • 嘿,NP。不过会有所帮助。如果是语法错误,那我该如何解决代码问题呢?还是系统导致错误?
    • 放回原答案,与新答案合并。该错误准确地告诉您问题所在。插入语句采用逗号分隔的值列表。这些列之一可以是函数(显式函数,而不是绑定变量)。该错误告诉您它需要一个函数。你传递了一个绑定变量。
    • 谢谢 Koen,它真的很有帮助。我现在可以工作了!
    猜你喜欢
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2021-02-26
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多