2017-02-07 1 views
0

Ich bin nicht sicher, ob der TitelWie Array anhängen und in einzelne Feld einfügen in oracle

korrekt ist oder nicht Ich habe folgende Tabelle erstellt

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

jetzt in einem PL/SQL-Code I verwenden Sie die folgende Anweisung

select tablespace_name, used_percent 
from dba_tablespace_usage_metrics 
where used_percent > 70; 

Für ex, der Ausgang der obigen Abfrage ist:

USERS 75 
TEMP 80 

Nun möchte ich diesen Ausgang in der Spalte tablespace_status als 'Benutzer: 75%, TEMP: 80%' in einem einzigen Feld gespeichert werden.

Wie kann ich das erreichen?

Antwort

0

Hoffnung unter Snipet hilft. Hinweis: WMSYS.WM_CONCAT ist undokumentierte Funktion, wenn das Objekt in Ihrer Datenbank vorhanden ist, wird es definitiv funktionieren. Alternative ist 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 Zeile eingefügt.

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 Reihe eingefügt.

+0

Hat Ihnen diese Lösung geholfen? Wenn ja, können Sie bitte die Antwort akzeptieren? –

+0

Für Ansatz 1 kommt der Fehler als zu viele Werte und für Ansatz 2 kommt der Fehler als fehlende rechte Klammer. Kannst du bitte helfen? – Nik

+0

Auch wenn Sie vorschlagen können, welcher Ansatz für Performance-Tuning am besten ist, wäre das großartig. – Nik

Verwandte Themen