如何在PL / SQL中打印DBMS_UTILITY过程结果?

时间:2017-10-20 16:25:30

标签: oracle plsql oracle11g

我尝试了几件事,但这是最后一件事。这是在SQL Developer中。我在各种尝试中都遇到了错误,但我不知道该怎么做。

declare
  jm varchar2;
begin
exec :jm := DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT','COMPUTE');
  dbms_output.put_line(jm);
end;
/

如何在SQL Developer中查看ANALYZE_SCHEMA结果?我打开了DBMS输出,这可行,

declare
  message varchar2(20):='hello johnny';
begin
  dbms_output.put_line(message);
end;
/

我也试过了,

declare
  jm varchar2;
begin

  dbms_output.put_line(DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT','COMPUTE'));
end;
/

它说PLS-00222:没有名称' ANALYZE_SCHEMA'存在于此范围内。

1 个答案:

答案 0 :(得分:1)

DBMS_UTILITY.ANALYZE_SCHEMA是一个程序,而不是函数。在PL / SQL中,您无法像函数一样直接读取过程的输出,因为没有返回值。从sqldeveloper / sqlplus调用过程的语法是

EXEC DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT','COMPUTE');

OR

BEGIN
DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT','COMPUTE');
END;

分析的统计数据在Oracle的数据字典中更新,并且可以通过以下查询(owner = 'SCOTT')查看您的案例

SELECT   owner, table_name, tablespace_name, num_rows, blocks, empty_blocks,
         avg_row_len, sample_size, last_analyzed
    FROM dba_tables
   WHERE UPPER (owner) = 'HR'
    ORDER BY owner, table_name;

示例输出

OWNER     TABLE_NAME          TABLESPACE_NAME       NUM_ROWS     BLOCKS EMPTY_BLOCKS AVG_ROW_LEN SAMPLE_SIZE LAST_ANA
--------- ------------------- ------------------- ---------- ---------- ------------ ----------- ----------- --------
HR        REGIONS             USERS                        4          5            3          17           4 20-10-17
HR        TQ84_COMPARE        USERS                        3          5            3          11           3 20-10-17
HR        TT                  USERS                       10          5            3          22          10 20-10-17