2017-10-20 64 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