2017-10-20 25 views
1

我尝试了几件事,但这是最后一件事。这是在SQL Developer中。我在各种尝试中遇到了错误,但我不知道该怎么做。如何在PL/SQL中打印DBMS_UTILITY过程结果?

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

'analyze_schema'收集您提供的模式中的对象的统计信息作为输入。 “查看结果”是什么意思?你想查看收集的程序并保存在系统表中的统计数据吗?顺便说一下,你的主题标题中有“功能”,但这是一个过程,而不是一个功能。 – mathguy

+0

不需要以PL/SQL块为开头。 'exec DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT','COMPUTE');'应该工作得很好。但该程序没有可以查看或显示的“结果”。 –

+0

如果没有结果我可以看到,那么我用它做什么? – johnny

回答

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; 

Sample Output

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