web-dev-qa-db-ja.com

Oracleプロシージャでサーバー出力をオンに設定します

簡単な手順を作成しました。この手順では、いくつかのデータを出力します。しかし、どこにset serveroutputを置くか

それは言います

エラー(26,5):PLS-00103:次のいずれかを予期しているときに、シンボル「SERVEROUTPUT」が発生しました:。 ()、* @%&=-+ </> at inはmod余りではなくrem => <>または!=または〜=> = <= <> andまたはlike like2 like4 likec between ||マルチセットメンバーサブマルチセット

どこに置いても構いません、言い続けます。

create or replace PROCEDURE discount  

is --- signature 

BEGIN --- executable part

update dvd set me_our_price = me_our_price*0.90 WHERE me_release_year = 2011;
update dvd set me_our_price = me_our_price*0.80 WHERE me_release_year = 2010;

update bluray set me_our_price = me_our_price*0.95 WHERE me_release_year = 2011;
update bluray set me_our_price = me_our_price*0.90 WHERE me_release_year = 2010;


DBMS_OUTPUT.PUT_LINE(' Blurays '); 
for i in ( 
SELECT e.mo_title, e.mo_bluray.me_list_price as me_list_price, e.mo_bluray.me_our_price    as  me_our_price FROM movie e  where e.mo_bluray is not null
 ) 
loop 

DBMS_OUTPUT.PUT_LINE(i.mo_title|| '  ' || i.me_list_price|| '  ' || i.me_list_price); 

end loop; 

DBMS_OUTPUT.PUT_LINE(' DVDs '); 
for i in ( 
set serveroutput on
SELECT e.mo_title, e.mo_dvd.me_list_price as me_list_price, e.mo_dvd.me_our_price as      me_our_price FROM movie e  where e.mo_dvd is not null
 ) 
loop 
DBMS_OUTPUT.PUT_LINE(i.mo_title|| '  ' || i.me_list_price|| '  ' || i.me_list_price); 
end loop; 


END discount; 
6
bicycle

「SET serveroutput ON」はSQL * Plusコマンドであり、有効なPL/SQLではありません。

17
DCookie

最初にspに次のコードを追加します。

BEGIN
    dbms_output.enable();
    dbms_output.put_line ('TEST LINE'); 
END;

Oracle SQL開発者でコードをコンパイルします。メニュービュー-> dbms出力に移動します。 Icon Green Plusをクリックして、スキーマを選択します。今すぐspを実行します。

7
Luis Armando
If you want to execute any procedure then firstly you have to set serveroutput on in the sqldeveloper work environment like.

->  SET SERVEROUTPUT ON;
-> BEGIN
dbms_output.put_line ('Hello World..');
dbms_output.put_line('Its displaying the values only for the Testing purpose');
END;
/
2
Bablu Gope

実際、BEGIN呼び出しの前にSET SERVEROUTPUT ON;を呼び出す必要があります。

誰もがこれを提案しましたが、実際にラインを配置する場所についてのアドバイスは提供していません。

SET SERVEROUTPUT ON;

BEGIN
    FOR rec in (SELECT * FROM EMPLOYEES) LOOP
        DBMS_OUTPUT.PUT_LINE(rec.EmployeeName);
    ENDLOOP;
END;

それ以外の場合、出力は表示されません。

2
Steve Bauman

手順は成功したが、すべての出力

エラー行1:予期しない識別子

コードは次のとおりです。

SET SERVEROUTPUT ON 

DECLARE

    -- Curseurs 
    CURSOR c1 IS        
    SELECT RWID FROM J_EVT
     WHERE DT_SYST < TO_DATE(TO_CHAR(SYSDATE,'DD/MM') || '/' || TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY')) - 3));

    -- Collections 

    TYPE tc1 IS TABLE OF c1%RWTYPE;

    -- Variables de type record
    rtc1                        tc1;    

    vCpt                        NUMBER:=0;

BEGIN

    OPEN c1;
    LOOP
        FETCH c1 BULK COLLECT INTO rtc1 LIMIT 5000;

        FORALL i IN 1..rtc1.COUNT 
        DELETE FROM J_EVT
          WHERE RWID = rtc1(i).RWID;
        COMMIT;

        -- Nombres lus : 5025651
        FOR i IN 1..rtc1.COUNT LOOP               
            vCpt := vCpt + SQL%BULK_RWCOUNT(i);
        END LOOP;            

        EXIT WHEN c1%NOTFOUND;   
    END LOOP;
    CLOSE c1;
    COMMIT;

    DBMS_OUTPUT.PUT_LINE ('Nombres supprimes : ' || TO_CHAR(vCpt)); 

END;
/
exit
0
LOULOU