Я хочу создать один оператор INSERT с несколькими значениями динамически, как в следующем примере:
INSERT INTO table_name (ID, PARENT, NAME, ENABLED)
VALUES (1, 't1', 'Test1', 1 ), (2, 't2', 'Test2', 1 ), (3, 't3', 'Test3', 1 );
В настоящее время я работаю со следующим утверждением, но теперь я получаю слишком много отдельных утверждений, и это не дает хороших результатов
SELECT 'INSERT INTO table_name(ID, PARENT, NAME, ENABLED) '
|| 'VALUES ('|| ID ||','''|| PARENT ||''','''|| NAME || ''', '|| ENABLED ||');'
FROM table_name WHERE ID IN (... [inner select] ...);
Как можно создать цикл, который присоединял бы новые значения в одном операторе вставки, подобном этому?
SELECT 'INSERT INTO table_name (ID, PARENT, NAME, ENABLED)' VALUES
DECLARE
myValues varchar2(500);
CURSOR myCur IS SELECT ID, PARENT, NAME, ENABLED FROM table_name;
BEGIN
FOR values IN myCur LOOP
IF myCur%ROWCOUNT = 1 THEN
myValues := '('||values.ID ||', '''|| values.PARENT ||''', '''|| values.NAME ||''', '|| values.ENABLED ||'),';
ELSE
myValues := '('||values.ID ||', '''|| values.PARENT ||''', '''|| values.NAME ||''', '|| values.ENABLED ||')';
end if;
END LOOP;
END;
--...
Мне это нужно для экспорта моих данных и вставки в другую базу данных с помощью sqlplus
спасибо всем