sql >> Databasteknik >  >> RDS >> Oracle

Hur kör man en lagrad procedur i oracle som innehåller två insert-satser?

Som felet säger skickar du fel antal eller typ av parametrar.

Jag skulle starkt rekommendera att använda namngiven parametersyntax om du försöker anropa en procedur med så många parametrar. Annars tenderar människor att ha svårt att märka när de utelämnar en parameter eller skickar parametrar i fel ordning om de försöker ta reda på vad de skickar för den 20:e parametern till en procedur. Personligen hade jag en tendens att omstrukturera en procedur långt innan jag försökte klara av 20 parametrar. Något så enkelt som att skicka in en eller två posttyper kan göra koden mycket lättare att läsa och förstå.

Jag har ändrat ditt samtal till att använda namngivna parametrar och lagt till kommentarer om var du har gjort misstag.

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



  1. Fel (ORA-21700) med bordsoperatör efter uppdatering till Oracle 12.2 från 12.1

  2. IDENTIFIERAD MED "lösenord" i MySQL

  3. PostgreSQL 9.1 installation och databaskodning

  4. (+) syntax för yttre kopplingar i mysql