2017-01-30 84 views
0

プロシージャを介してV $ RESOURCE_LIMIT結果のOracle DBMS_OUTPUTを取得しようとしています。

しかし、私はc1が完全ではないか、形式が正しくないというエラーが表示されています。

これまでのところ、私は、次のコードを持っている:私は、より完全にあなたを助けるために、Oracleインスタンスの前ではないです

CREATE OR REPLACE PROCEDURE resource_output AS 

CURSOR c1 IS SELECT resource_name , current_utilization , max_utilization , initial_allocation , limit_value FROM v$resource_limit; 
TYPE rl_typ IS TABLE OF c1%ROWTYPE; 
rl rl_typ; 

BEGIN 
dbms_output.enable(100000); 

    FOR rl IN (
    select * BULK COLLECT INTO rl from v$resource_limit 
) 
    LOOP 
    DBMS_OUTPUT.PUT_LINE('Resource Name = ' || rl.resource_name || 
         ', Current Utilization = ' || rl.current_utilization || 
         ', Max Utilization = ' || rl.max_utilization || 
         ', Initial Allocation = ' || rl.initial_allocation || 
         ', Limit Value = ' || rl.limit_value); 
    END LOOP; 

END resource_output; 
+1

なぜこれをPL/SQLコードで実行しますか? – mathguy

答えて

0
CREATE OR REPLACE PROCEDURE resource_output AS 


BEGIN 
dbms_output.enable(100000); 

    FOR rl IN (
    select * from v$resource_limit 
) 
    LOOP 
    DBMS_OUTPUT.PUT_LINE('Resource Name = ' || rl.resource_name || 
         ', Current Utilization = ' || rl.current_utilization || 
         ', Max Utilization = ' || rl.max_utilization || 
         ', Initial Allocation = ' || rl.initial_allocation || 
         ', Limit Value = ' || rl.limit_value); 
    END LOOP; 

END resource_output; 

exec resource_output; 

出力:

Resource Name = processes, Current Utilization = 103, Max Utilization = 179, Initial Allocation =  900, Limit Value =  900 
Resource Name = sessions, Current Utilization = 117, Max Utilization = 212, Initial Allocation =  1372, Limit Value =  1372 
Resource Name = enqueue_locks, Current Utilization = 105, Max Utilization = 223, Initial Allocation =  15820, Limit Value =  15820 
Resource Name = enqueue_resources, Current Utilization = 35, Max Utilization = 94, Initial Allocation =  6256, Limit Value = UNLIMITED 
Resource Name = ges_procs, Current Utilization = 0, Max Utilization = 0, Initial Allocation =   0, Limit Value =   0 
Resource Name = ges_ress, Current Utilization = 0, Max Utilization = 0, Initial Allocation =   0, Limit Value = UNLIMITED 
Resource Name = ges_locks, Current Utilization = 0, Max Utilization = 0, Initial Allocation =   0, Limit Value = UNLIMITED 
Resource Name = ges_cache_ress, Current Utilization = 0, Max Utilization = 0, Initial Allocation =   0, Limit Value = UNLIMITED 
Resource Name = ges_reg_msgs, Current Utilization = 0, Max Utilization = 0, Initial Allocation =   0, Limit Value = UNLIMITED 
Resource Name = ges_big_msgs, Current Utilization = 0, Max Utilization = 0, Initial Allocation =   0, Limit Value = UNLIMITED 
Resource Name = ges_rsv_msgs, Current Utilization = 0, Max Utilization = 0, Initial Allocation =   0, Limit Value =   0 
Resource Name = gcs_resources, Current Utilization = 0, Max Utilization = 0, Initial Allocation = UNLIMITED, Limit Value = UNLIMITED 
Resource Name = gcs_shadows, Current Utilization = 0, Max Utilization = 0, Initial Allocation = UNLIMITED, Limit Value = UNLIMITED 
Resource Name = smartio_overhead_memory, Current Utilization = 0, Max Utilization = 68632, Initial Allocation =   0, Limit Value = UNLIMITED 
Resource Name = smartio_buffer_memory, Current Utilization = 0, Max Utilization = 0, Initial Allocation =   0, Limit Value = UNLIMITED 
Resource Name = smartio_metadata_memory, Current Utilization = 0, Max Utilization = 0, Initial Allocation =   0, Limit Value = UNLIMITED 
Resource Name = smartio_sessions, Current Utilization = 0, Max Utilization = 1, Initial Allocation =   0, Limit Value = UNLIMITED 
Resource Name = dml_locks, Current Utilization = 0, Max Utilization = 0, Initial Allocation =  6036, Limit Value = UNLIMITED 
Resource Name = temporary_table_locks, Current Utilization = 0, Max Utilization = 65, Initial Allocation = UNLIMITED, Limit Value = UNLIMITED 
Resource Name = transactions, Current Utilization = 5, Max Utilization = 5, Initial Allocation =  1509, Limit Value = UNLIMITED 
Resource Name = branches, Current Utilization = 0, Max Utilization = 0, Initial Allocation =  1509, Limit Value = UNLIMITED 
Resource Name = cmtcallbk, Current Utilization = 3, Max Utilization = 19, Initial Allocation =  1509, Limit Value = UNLIMITED 
Resource Name = max_rollback_segments, Current Utilization = 14, Max Utilization = 21, Initial Allocation =  1509, Limit Value =  65535 
Resource Name = sort_segment_locks, Current Utilization = 16, Max Utilization = 40, Initial Allocation = UNLIMITED, Limit Value = UNLIMITED 
Resource Name = k2q_locks, Current Utilization = 0, Max Utilization = 0, Initial Allocation =  2744, Limit Value = UNLIMITED 
Resource Name = max_shared_servers, Current Utilization = 0, Max Utilization = 0, Initial Allocation = UNLIMITED, Limit Value = UNLIMITED 
Resource Name = parallel_max_servers, Current Utilization = 0, Max Utilization = 16, Initial Allocation =   40, Limit Value =  3600 
+0

あなたのOracleバージョンplsを知っていますか?コードをコピーして貼り付けたが、ORA-00942とPLS-00364のエラーが発生したためです。 – Annon

+0

ORA -00942は表またはビューではなく、PLS-00364はループ索引変数です。 'RL'は無効です。 – Annon

+0

私はそれがv $ resource_limit問題だと思います。私はHR.departmentsで試してみましたが問題はありません。上記がSYSDBAとしてSYSを使用して実行されたことを知ってもいいですか? – Annon

1

申し訳ありません。しかし、私はc1の宣言に何も間違いはないと思う。

ただし、手順で実際にc1を使用していません。あなたのFORループは次のようになります。

FOR rl IN (
    select * from v$resource_limit 
) LOOP 

...ないBULK COLLECT INTO r1

+0

最初の宣言セクションでc1が使用されていませんか? – Annon

+0

あなたの 'FOR ... LOOP'が' BULK COLLECT'を取り出せば書かれたように動作するように 'c1'、' rl_typ'、または 'rl'を宣言する必要はありません。 –

+0

ありがとうございます。ただし、プロシージャのコンパイルにはORA-00942およびPLS-00364でエラーがあります。 – Annon

0

grant select any dictionary to that particular user。またはv $ resource_limitにのみ特権を与えたい場合は、grant select on v$resource_limit to particular userを入力します。 してから試してみてください

+0

許可を選択すると、HRに辞書が表示されます。ありがとうございました。 – Annon

関連する問題