简体   繁体   English

如何将 select 查询的结果插入到另一个表的列中

[英]How to insert the result of the select query in another table's column

SELECT segment_name TABLE_NAME, SUM(bytes) table_size
  FROM USER_SEGMENTS
 WHERE SEGMENT_TYPE = 'TABLE'
 GROUP BY segment_name
 ORDER BY segment_name ASC;

INSERT INTO R_LOG (DOMAINID, SOURCENAME, TERMINALID,userid, DETAILTEXT)
VALUES (1, 'tables_job', 'TEST', 'GUEST',?????);

I want to store the query output (two columns) in a DETAILTEXT column (single column) of R_LOG table我想将查询 output(两列)存储在R_LOG表的DETAILTEXT列(单列)中

SELECT segment_name TABLE_NAME, SUM(bytes) table_size
  FROM USER_SEGMENTS
 WHERE SEGMENT_TYPE = 'TABLE'
 GROUP BY segment_name
 ORDER BY segment_name ASC;

This part of my code is working totally fine - but I'm not able to insert the value.我的这部分代码工作得很好——但我无法插入值。

Any help will be appreciated任何帮助将不胜感激

Seems you need LISTAGG() function along with an INSERT statement似乎您需要LISTAGG() function 以及INSERT语句

INSERT INTO R_LOG
SELECT 1, 'tables_job', 'TEST', 'GUEST', 
       LISTAGG('Table : '||segment_name||'- size: '|| SUM(bytes),', ') 
        WITHIN GROUP (ORDER BY segment_name)
  FROM USER_SEGMENTS
 WHERE SEGMENT_TYPE = 'TABLE'
 GROUP BY segment_name

If you get ORA-01489 : result of string concatenation is too long error, then replace the last column containing LISTAGG() function with如果出现 ORA-01489 : result of string concatenation is too long错误,则将包含LISTAGG() function 的最后一列替换为

RTRIM(XMLAGG(XMLELEMENT(e, 'Table : '||segment_name||'- size: '|| SUM(bytes), ',')
      .EXTRACT('//text()') ORDER BY segment_name)
      .GetClobVal(),
      ',')

I guess you want to concatenate the columns segment_name and SUM(bytes) in the destination column.我猜您想在目标列中连接列segment_nameSUM(bytes)
Use SELECT instead of VALUES :使用SELECT而不是VALUES

INSERT INTO R_LOG (DOMAINID, SOURCENAME, TERMINALID,userid, DETAILTEXT) 
SELECT 1, 'tables_job', 'TEST', 'GUEST', segment_name || ' ' || SUM(bytes) 
FROM USER_SEGMENTS
WHERE SEGMENT_TYPE='TABLE'
GROUP BY segment_name
ORDER BY segment_name ASC;

You can directly use the INSERT INTO <TABLE_NAME>[(columns)] SELECT.. as follows:您可以直接使用INSERT INTO <TABLE_NAME>[(columns)] SELECT..如下:

INSERT INTO R_LOG (
    DOMAINID,
    SOURCENAME,
    TERMINALID,
    USERID,
    DETAILTEXT
)
    SELECT 1, -- need to use some sequence here
           'tables_job',
           'TEST',
           'GUEST',
           SEGMENT_NAME || ' ' || SUM(BYTES)
      FROM USER_SEGMENTS
     WHERE SEGMENT_TYPE = 'TABLE'
     GROUP BY SEGMENT_NAME; 
     -- Order by is not needed

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM