2017-02-07 8 views
0

Я не уверен, правильно ли название или нетКак добавить массив и вставить в одно поле в оракула

Я создал следующую таблицу

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

теперь в/SQL кода I PL использовать следующий оператор

select tablespace_name, used_percent 
from dba_tablespace_usage_metrics 
where used_percent > 70; 

Для экс, выход выше запроса:

USERS 75 
TEMP 80 

Теперь я хочу, чтобы этот вывод хранился в столбце tablespace_status как «ПОЛЬЗОВАТЕЛИ: 75%, ТЕМП: 80%» в одном отдельном поле.

Как я могу это достичь?

ответ

0

Надежда ниже снайперской помощи. Примечание: WMSYS.WM_CONCAT - это недокументированная функция, поэтому, если объект присутствует в вашей базе данных, он будет определенно worK. Альтернатива - 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]ink1 
    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