Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在oracle中追加数组并插入到单个字段中_Arrays_Oracle_Plsql - Fatal编程技术网

Arrays 如何在oracle中追加数组并插入到单个字段中

Arrays 如何在oracle中追加数组并插入到单个字段中,arrays,oracle,plsql,Arrays,Oracle,Plsql,我不确定标题是否正确 我已经创建了一个下表 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_perce

我不确定标题是否正确

我已经创建了一个下表

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;
对于ex,上述查询的输出为:

USERS  75
TEMP   80
现在,我希望将此输出存储在列
tablespace\u status
中,作为“USERS:75%,TEMP:80%”存储在单个字段中

我怎样才能做到这一点

希望下面的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 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行。

此解决方案对您有帮助吗?如果是,你能接受答案吗?对于方法1,错误是因为值太多,对于方法2,错误是因为缺少右括号。您能帮忙吗?另外,如果您能建议哪种方法最适合进行性能调优,那就太好了。方法1适合进行调优。此外,查询工作正常。请您检查一下您是如何运行查询的。另外,您是否可以检查您正在运行的oracle版本?方法1正在运行,但要求从5个不同的数据库获取表空间,如果表空间>70%,我需要将其插入一个字段,即表空间\ U状态列。另外,如果您能帮助我像“tablespacename:tablespacepercent:dbname”那样插入它,那将非常棒!!
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;