sql >> データベース >  >> RDS >> Oracle

2つの挿入ステートメントを含むオラクルでストアドプロシージャを実行する方法は?

    エラーが示すように、間違った数またはタイプのパラメーターを渡しています。

    このように多くのパラメーターを使用してプロシージャを呼び出そうとする場合は、名前付きパラメーター構文を使用することを強くお勧めします。それ以外の場合、人間は、20 番目のパラメーターとしてプロシージャーに渡されているものを理解しようとしている場合に、パラメーターを省略したり、間違った順序でパラメーターを渡したりしたことに気付くのが困難になる傾向があります。個人的には、20 個のパラメーターを渡そうとするずっと前に、プロシージャーをリファクタリングする傾向がありました。 1 つまたは 2 つのレコード タイプを渡すだけで、コードが読みやすく理解しやすくなります。

    名前付きパラメーターを使用するように呼び出しを変更し、間違いを犯した場所についてコメントを追加しました。

    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. 注意:CREATELANGUAGEパラメーターの代わりにpg_pltemplate情報を使用する

    2. EF with oracle - 指定されたストア プロバイダーが構成内に見つからないか、無効です。

    3. 文字列を正しい方法で分割する–または次善の方法

    4. PHPでmysqlテーブルをロックする方法