【问题标题】:Oracle DBMS_OUTPUT of V$RESOURCE_LIMITV$RESOURCE_LIMIT 的 Oracle DBMS_OUTPUT
【发布时间】:2017-06-15 04:13:07
【问题描述】:

我正在尝试通过一个过程获取 V$RESOURCE_LIMIT 结果的 Oracle DBMS_OUTPUT。

但是,我收到关于 c1 不完整或格式错误的错误。

到目前为止,我有以下代码:

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;

【问题讨论】:

  • 为什么要在 PL/SQL 代码中这样做?

标签: oracle stored-procedures plsql dbms-output


【解决方案1】:

对不起,我没有在 Oracle 实例面前​​更全面地帮助您。但是,我认为您对c1 的声明没有任何问题。

但是,您实际上并没有在您的过程中使用c1。你的FOR 循环应该是:

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

...没有BULK COLLECT INTO r1

【讨论】:

  • 在初始声明部分中没有使用 c1 吗?
  • 您不需要为您的FOR...LOOP 声明c1rl_typrl 以按书面方式工作(如果您取出BULK COLLECT,如我之前所说) .
  • 谢谢。但是程序编译仍然存在 ORA-00942 和 PLS-00364 错误。
【解决方案2】:
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

【讨论】:

  • 请问您的Oracle版本可以吗?因为我复制并粘贴了代码,但仍然出现错误,ORA-00942 和 PLS-00364。
  • ORA -00942 是表或视图不存在,PLS-00364 是循环索引变量“RL”使用无效。
  • 我认为是 v$resource_limit 问题。我用 HR.departments 试过了,没有问题。我可以知道以上是使用 SYS 作为 SYSDBA 执行的吗?
  • 是的,我使用过 sysdba。好的,HR 用户对 v$resource_limit 有直接权限?
  • 是的。我可以从 v$resource_limit 中选择 *。但我就是无法运行该程序。无论如何,我对上面的代码毫无疑问。我会把它标记为答案,因为它做了它应该做的事情。循环并打印结果。谢谢
【解决方案3】:

grant select any dictionary to that particular user;或者如果您只想授予 v$resource_limit 特权,则 grant select on v$resource_limit to particular user; 然后试试

【讨论】:

    猜你喜欢
    • 2020-05-28
    • 2018-05-29
    • 2013-08-24
    • 1970-01-01
    • 2014-12-30
    • 2015-01-19
    • 1970-01-01
    • 2011-03-25
    • 2021-10-01
    相关资源
    最近更新 更多