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

ストアドプロシージャ-SQLDeveloper

    必要なのがキャンピングカーIDだけであるのに(そして残りのパラメーターでは何もしないのに)、なぜパラメーターの束全体を渡すのでしょうか?それは意味がありません...

    これは、その方法を示すオプションです。

    サンプルテーブル:

    SQL> select * from charges;
    
      CAMPERID CATEGORY   CHARGEDATE                 AMT
    ---------- ---------- ------------------- ----------
             1 Category 1 12.10.2021 00:00:00        500
    
    SQL>
    

    手順:

    SQL> create or replace procedure p_test
      2    (par_camperid   in charges.camperid%type,
      3     par_message   out varchar2
      4    )
      5  as
      6    l_camperid   charges.camperid%type;
      7  begin
      8    select c.camperid
      9      into l_camperid
     10      from charges c
     11      where c.camperid = par_camperid;
     12
     13    par_message := 'Camper ' || par_camperid || ' exists';
     14  exception
     15    when no_data_found then
     16      par_message := 'Error: no such camper ID (' || par_camperid || ')';
     17  end;
     18  /
    
    Procedure created.
    

    テスト:

    SQL> set serveroutput on;
    SQL> declare
      2    l_msg varchar2(100);
      3  begin
      4    p_test(1, l_msg);
      5    dbms_output.put_line(l_msg);
      6  end;
      7  /
    Camper 1 exists
    
    PL/SQL procedure successfully completed.
    
    SQL> declare
      2    l_msg varchar2(100);
      3  begin
      4    p_test(2, l_msg);
      5    dbms_output.put_line(l_msg);
      6  end;
      7  /
    Error: no such camper ID (2)
    
    PL/SQL procedure successfully completed.
    
    SQL>
    

    あなたが書いたコード:

    • タイプミス、タイプミス、タイプミス...それはp_error またはp_erorr
    • if end ifが必要です
    • if selectを含めることはできません ステートメント(値を個別に選択してから、ifで使用する必要があります )
    • where 状態が間違っています。パラメータに列名と同じ名前を付けることは絶対にしないでください。これ:where camperid = camperid where 1 = 1 探している行だけでなく、テーブルからすべての行を取得します


    1. VARCHAR列への挿入時にCHARデータを自動的にトリミングする

    2. Heroku-データベースからローカルデータベースにデータをプルする方法は?

    3. テーブルを結合する方法-SQL

    4. 結果セットのnext()メソッドによる行のスキップの回避