Search code examples
plsqloracle-apexplsqldeveloper

PLSQL form insert error, can someone help me? I have no clue


I have this code where I want to add some inserted values, sum them and insert in a specific column. But I am getting an error after an error. And I think this is the final one, but I have no clue. Good someone help me out? Added a screenshot with more information.

My code:

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


Solution

  • what is " :P8_TOTAAL_AANTAL_UREN" and ":P8_TOTAAL_BEDRAG" ? They are bind variables in apex, so they contain a string (not a function name) However, looking at your code, it seems you are trying to reference a function in a bind variable which will give that error you see. Most probably this is just a syntax error, you could give this a try:

    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;
    

    If you really want a function, then you could do one of the following: Note that these are more complex solutions.

    Option 1:

    You're using apex. Best practice to handle this is to create a computation that would calculate the page item for column UREN_GEWERKT and another one for for column TOTAAL_BEDRAG. Your pl/sql block would then be:

    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;
    

    You could also use the build-in form region to do all the magic for you in this case.

    Option 2:

    Assuming you have (1) a pl/sql function total_hours that return a value of the same datatype as thuiswerk_declaratie.UREN_GEWERKT and takes 5 arguments (1 per day of the week and (2) another function total_amount that returns a value of the same datatype as thuiswerk_declaratie. TOTAAL_BEDRAG and takes 1 argument you could write your pl/sql block as:

    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;