[英]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_name
和SUM(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.