我不确定标题是否正确
我创建了一个下表
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
以“ USERS:75%,TEMP:80%”的形式存储在该列中。
我怎样才能做到这一点?
希望在摘要下面有所帮助。注意: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 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行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句