Som fejlen siger, sender du det forkerte antal eller den forkerte type parametre.
Jeg vil kraftigt anbefale at bruge navngivne parametersyntaks, hvis du forsøger at kalde en procedure med så mange parametre. Ellers har mennesker en tendens til at have svært ved at lægge mærke til, når de udelader en parameter eller sender parametre i den forkerte rækkefølge, hvis de forsøger at finde ud af, hvad de sender for den 20. parameter til en procedure. Personligt havde jeg en tendens til at omstrukturere en procedure længe før jeg prøvede at bestå 20 parametre. Noget så simpelt som at indsætte en eller to posttyper kan gøre koden meget nemmere at læse og forstå.
Jeg har ændret dit opkald til at bruge navngivne parametre og tilføjet kommentarer til, hvor du har lavet fejl.
execute new_order(
p_order_id => 4, -- Pass in a number rather than using implicit conversion
p_order_num => 'O223PS562',
p_name => 'Test Test',
p_email => '[email protected]',
p_address => '123 Test Street',
p_city => 'Newcastle Upon Tyne',
p_province => 'Tyne and Wear',
p_postcode => 'NE98 4TN',
p_telephone => '123456789',
p_total => 7.97, -- Pass in a number rather than using implicit conversion
p_order_date => to_date('11-apr-2021', 'DD-mon-YYYY'), -- Pass in a date rather than using implicit conversion
p_order_item_id => 5, -- Pass in a number rather than using implicit conversion
p_product_id => 4, -- Pass in a number rather than using implicit conversion
p_seller_id => 2, -- Pass in a number rather than using implicit conversion
p_sub_order_number => 2, -- Pass in a number rather than using implicit conversion
p_quantity => 3073748221, -- Do you really want the quantity to be in the billions? That seems unlikely.
-- Perhaps there was supposed to be a phone number parameter
p_condition => '2', -- That doesn't look like a condition. Probably meant to be a unit price
p_unit_price => 'Brand new', -- Here we have a definite error. p_unit_price is a number but you can't connvert
-- the string 'Brand new' to a number. I assume that was really supposed to be the
-- condition
p_cost_charge => 1.99, -- Pass in a number rather than using implicit conversion
'2.00' -- And here we have a value being passed in but no equivalent parameter
);