Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie führe ich eine gespeicherte Prozedur in Oracle aus, die zwei Insert-Anweisungen enthält?

Wie der Fehler sagt, übergeben Sie die falsche Anzahl oder den falschen Parametertyp.

Ich würde dringend empfehlen, benannte Parametersyntax zu verwenden, wenn Sie versuchen, eine Prozedur mit so vielen Parametern aufzurufen. Andernfalls fällt es Menschen schwer, zu bemerken, wenn sie einen Parameter auslassen oder Parameter in der falschen Reihenfolge übergeben, wenn sie versuchen herauszufinden, was sie als 20. Parameter an eine Prozedur übergeben. Persönlich würde ich dazu neigen, eine Prozedur umzugestalten, lange bevor ich versuchte, 20 Parameter zu übergeben. Etwas so Einfaches wie das Übergeben von einem oder zwei Datensatztypen kann den Code viel einfacher zu lesen und zu verstehen machen.

Ich habe Ihren Aufruf geändert, um benannte Parameter zu verwenden, und Kommentare hinzugefügt, wo Sie Fehler gemacht haben.

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