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

エラーPLS-00428を与えるOracleのストアドプロシージャ

    クライアント(SQLPlusまたはSQLDeveloperまたはToad)を使用してSQLを直接実行している場合、データはクライアントに返されます。PL/ SQL内で同じクエリを実行する場合は、そのデータをどのように処理するかをOracleに指示する必要があります。通常、プログラムは出力をPl / SQL変数に格納して、さらに処理します。

    https://docs.oracle.com/cd/B19306_01 /appdev.102/b14261/selectinto_statement.htm

    したがって、あなたの場合、これらの線に沿って何かが必要になるかもしれません。

    CREATE OR REPLACE PROCEDURE SPBILL (SPCLIENT_ID VARCHAR2) 
    AS
      l_client_name clients.client_name%type;
      l_room_id rooms.room_id%type;
      ...
      l_invoice number(5,2);
    BEGIN
       SELECT C.CLIENT_NAME, B.ROOM_ID, R.ROOM_COST, T.TREAT_NAME, T.TREAT_COST, (ROOM_COST*(B_END_DATE-B_START_DATE)+TREAT_COST)
       into l_client_name, l_room_id...l_invoice
       FROM CLIENTS C, ROOMS R, TREATMENTS T, BOOKING B, PRESCRIPTION P
       WHERE C.CLIENT_ID=B.CLIENT_ID
       AND R.ROOM_ID=B.ROOM_ID
       AND B.CLIENT_ID=P.CLIENT_ID
       AND P.TREAT_ID=T.TREAT_ID
       AND C.CLIENT_ID=SPCLIENT_ID;
    
       --further processing here based on variables above.
       dbms_output.put_line(l_invoice);
    END SPBILL;
    

    エラーなしでコンパイルしたら、プロシージャを実行できます。

    set serveroutput on; 
    SPBILL(100); 
    


    1. PHP MYSQL <?php echo $ row [$ variable]; ?>

    2. 個別の値とその数を返す方法は?

    3. MySQL General / Slow Query Logsでパスワードを非表示にすることは可能ですか?

    4. AccessとExcelを一緒に使用するトップ10の理由