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

プロシージャの呼び出しで引数の数または型が間違っている

    2 番目と 3 番目の引数が必要ない場合は、次のように、引数の代わりにプロシージャ内でそれらを変数として宣言できます:

    CREATE OR REPLACE PROCEDURE DDPAY_SP(DONOR_ID IN  DD_DONOR.IDDONOR%TYPE,
                                         RET      OUT BOOLEAN)
    IS
      nPayment_count  NUMBER;
    BEGIN 
      SELECT COUNT(*)
        INTO nPayment_count  
        FROM DD_PLEDGE p
        WHERE p.IDDONOR = DONOR_ID AND
              p.IDSTATUS = 10 AND
              p.PAYMONTHS > 0;
    
      IF nPayment_count > 0 THEN
        RET := TRUE;
      END IF;
    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('DD_PAY - exception: ' || SQLCODE || ' : ' || SQLERRM);
        RAISE;
    END DDPAY_SP;
    

    DD_PAY の最後に EXCEPTION ハンドラの例を含めました。少なくともこの最小限のハンドラーを含めることは常に良い考えです。そうすれば、例外が発生した場合に、問題がどこにあるかの何らかの兆候を得ることができます.

    このプロシージャは BOOLEAN 値を返しますが、(私の知る限りでは) SQL*Plus から BOOLEAN を使用できないため、次のように PL/SQL ブロックから呼び出す必要があります。

    DECLARE
      bRetval  BOOLEAN;
    BEGIN
      DD_PAY(308, bRetval);
      DBMS_OUTPUT.PUT_LINE('Returned value is ' ||
                           CASE bRetval
                             WHEN TRUE THEN 'TRUE'
                             ELSE 'FALSE'
                           END);
    END;
    

    試してみてください。

    編集:後のコメントからの詳細情報に基づいて手順を書き直しました。

    共有して楽しんでください。




    1. t-sql(SQL Server)ストアドプロシージャをpgsql(postgre sql)に変換するツール

    2. Postgresインデックス名はどのレベルで一意である必要がありますか?

    3. MySQLJSON配列から個別の値を取得する

    4. 関数UNIX_TIMESTAMPは存在しません