Như lỗi cho biết, bạn đang chuyển sai số hoặc loại thông số.
Tôi thực sự khuyên bạn nên sử dụng cú pháp tham số được đặt tên nếu bạn đang cố gọi một thủ tục có nhiều tham số này. Mặt khác, con người có xu hướng khó nhận ra khi họ bỏ qua một tham số hoặc chuyển các tham số không đúng thứ tự nếu họ đang cố gắng tìm ra những gì họ đang chuyển cho tham số thứ 20 vào một thủ tục. Cá nhân tôi có xu hướng cấu trúc lại một thủ tục rất lâu trước khi tôi cố gắng chuyển 20 tham số vào. Một cái gì đó đơn giản như chuyển một hoặc hai loại bản ghi có thể làm cho mã dễ đọc và dễ hiểu hơn nhiều.
Tôi đã thay đổi cuộc gọi của bạn để sử dụng các thông số được đặt tên và thêm nhận xét cho những chỗ bạn đã mắc lỗi.
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
);