sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo ejecutar un procedimiento almacenado en Oracle que contiene dos declaraciones de inserción?

Como dice el error, está pasando el número o tipo de parámetros incorrecto.

Recomendaría encarecidamente usar la sintaxis de parámetros con nombre si intenta llamar a un procedimiento con tantos parámetros. De lo contrario, los humanos tienden a tener dificultades para darse cuenta cuando omiten un parámetro o pasan parámetros en el orden incorrecto si están tratando de averiguar qué están pasando para el vigésimo parámetro a un procedimiento. Personalmente, tendería a refactorizar un procedimiento mucho antes de intentar pasar 20 parámetros. Algo tan simple como pasar uno o dos tipos de registro puede hacer que el código sea mucho más fácil de leer y comprender.

Cambié su llamada para usar parámetros con nombre y agregué comentarios sobre dónde cometió errores.

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
);