我不确定标题是否正确
我创建了一个下表
create table healthcheck
(
fordate date default sysdate,
tablespace_status varchar2(100),
comments varchar2(200)
);
现在在PL / SQL代码中我使用以下语句
select tablespace_name, used_percent
from dba_tablespace_usage_metrics
where used_percent > 70;
例如,上述查询的输出为:
USERS 75
TEMP 80
现在我希望此输出存储在tablespace_status
列中,因为'用户:75%,TEMP:80%'在一个单一的领域。
我怎样才能做到这一点?
答案 0 :(得分:0)
希望在snipet之下有所帮助。 注意: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 global_name@dblink1
) Dbname
FROM DBA_TABLESPACE_USAGE_METRICS@dblink1
WHERE USED_PERCENT > 70
UNION ALL
SELECT tablespace_name ,
USED_PERCENT ,
(SELECT global_name FROM global_name@dblink2
) Dbname
FROM DBA_TABLESPACE_USAGE_METRICS@dblink2
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行。