2015-03-15 2 views
1

У меня есть этот запрос, который вставляет 4 новые строки в мою таблицу. Я не хочу этого. Я хочу вставить одну строку и отдельные значения с ,. Как я могу это сделать?Oracle несколько значений в одной строке

INSERT INTO DOCUMENTATION (NAME, VALUE, QUERY, INSERTDATE) 
    SELECT 'Datafile paths', name, 'select name from V$DATAFILE', SYSDATE 
    from V$DATAFILE; 
+0

Извините, я забыл. @SMA –

ответ

1

В Oracle, агрегирование несколько строк в одну, разделенных запятыми является сделано с LISTAGG:

INSERT INTO DOCUMENTATION (NAME, VALUE, QUERY, INSERTDATE) 
SELECT 'Datafile paths', 
     LISTAGG(name, ', ') WITHIN GROUP (ORDER BY name), 
     'select name from V$DATAFILE', 
     SYSDATE 
FROM V$DATAFILE; 

Берегись предела 4000 символов, как всегда ...

1

Попробуйте объединить все значения, используя "||" как:

INSERT INTO DOCUMENTATION (NAME, VALUE, QUERY, INSERTDATE) 
SELECT 'Datafile paths' || name || 'select name from V$DATAFILE' || SYSDATE, 'Datafile paths' || name || 'select name from V$DATAFILE' || SYSDATE, 'Datafile paths' || name || 'select name from V$DATAFILE' || SYSDATE, 'Datafile paths' || name || 'select name from V$DATAFILE' || SYSDATE 
from V$DATAFILE; 

Если вам нужно выбрать только одну строку, то вам нужно будет указать, где положение, как:

INSERT INTO DOCUMENTATION (NAME, VALUE, QUERY, INSERTDATE) 
SELECT 'Datafile paths', name, 'select name from V$DATAFILE', SYSDATE 
FROM V$DATAFILE 
WHERE myfield = 'foobar'; 
Смежные вопросы