2017-02-07 92 views
0

我不知道標題是否正確與否如何追加數組,並插入到單個字段在Oracle

我已經在PL/SQL代碼,我創建了一個如下表

create table healthcheck 
(
fordate date default sysdate, 
tablespace_status varchar2(100), 
comments varchar2(200) 
); 

現在使用下面的語句

select tablespace_name, used_percent 
from dba_tablespace_usage_metrics 
where used_percent > 70; 

對於離,上述查詢的輸出是:

USERS 75 
TEMP 80 

現在我希望這個輸出在單個字段中作爲'用戶:75%,TEMP:80%'存儲在列tablespace_status

我該如何做到這一點?

回答

0

希望低於snipet有幫助。 注意:WMSYS.WM_CONCAT是未公開的函數,所以如果對象存在於你的數據庫中,它將定義工作。替代方案是LISTAGG。

Approach 1 :LISTAGG 

    CREATE TABLE healthcheck 
    (
    fordate   DATE DEFAULT sysdate, 
    tablespace_status VARCHAR2(100), 
    COMMENTS   VARCHAR2(200) 
); 



    INSERT INTO HEALTHCHECK 
SELECT sysdate, 
    LISTAGG(tablespace_name 
    ||':' 
    ||ROUND(USED_PERCENT) 
    ||':' 
    ||Dbname, ', ') within GROUP (
ORDER BY tablespace_name DESC) status, 
    NULL 
FROM 
    (SELECT tablespace_name, 
    USED_PERCENT , 
    (SELECT global_name FROM [email protected] 
    ) Dbname 
    FROM [email protected] 
    WHERE USED_PERCENT > 70 
    UNION ALL 
    SELECT tablespace_name , 
    USED_PERCENT , 
    (SELECT global_name FROM [email protected] 
    ) Dbname 
    FROM [email protected] 
    WHERE USED_PERCENT > 70 
    --union all for all 5 dblinks 
)a ; 

插入1行。

Approach 2 : WMSYS.WM_CONCAT 

    INSERT INTO HEALTHCHECK 
    SELECT sysdate, 
     WMSYS.WM_CONCAT(a.fld), 
     NULL 
    FROM 
     (SELECT tablespace_name 
     ||':' 
     ||round(used_percent)||':'||ORA_DATABASE_NAME fld 
     FROM DBA_TABLESPACE_USAGE_METRICS 
     WHERE used_percent > 70 
    )A; 

插入1行。

+0

該解決方案對您有幫助嗎?如果可以,請接受答案? –

+0

對於方法1,錯誤是由於太多的數值而引起的,對於方法2,錯誤即將作爲右括號丟失。能否請你幫忙? – Nik

+0

另外,如果您可以建議哪種方法最適合性能調優,那就太好了。 – Nik

相關問題