Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment exécuter une procédure stockée dans Oracle contenant deux instructions d'insertion?

Comme l'indique l'erreur, vous transmettez le mauvais nombre ou type de paramètres.

Je recommanderais fortement d'utiliser la syntaxe des paramètres nommés si vous essayez d'appeler une procédure avec autant de paramètres. Sinon, les humains ont tendance à avoir du mal à remarquer quand ils omettent un paramètre ou passent des paramètres dans le mauvais ordre s'ils essaient de comprendre ce qu'ils passent pour le 20ème paramètre à une procédure. Personnellement, j'aurais tendance à refactoriser une procédure bien avant d'essayer de passer 20 paramètres. Quelque chose d'aussi simple que de transmettre un ou deux types d'enregistrement peut rendre le code beaucoup plus facile à lire et à comprendre.

J'ai changé votre appel pour utiliser des paramètres nommés et ajouté des commentaires pour les erreurs que vous avez commises.

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