2014-10-02 2 views
0

Я хотел бы вставить эти значения в следующем виде:Oracle) вставить несколько строк с одним фиксированным значением

insert into table (name, action-id) values ('user', select action from actions where name='user2'); 

Результат существо:

Вставки вдоль линии, ('user', 1) ('user', 2) ('user', 3)

Я замечаю, что это не правильно sql. Как я могу это сделать?

примечание)

select action from actions where name='user2' 

вернется: (1, 2, 3)

ответ

3

Вы можете сделать это с помощью цикла:

BEGIN 

    FOR x IN (select action from actions where name='user2') LOOP 

     insert into table (name, action-id) values ('user', x.action) 

    END LOOP; 
END; 

или вы могли бы использовать синтаксис INSERT/SELECT:

INSERT INTO table (name, action-id) 
    SELECT 'user', action 
    FROM actions WHERE name='user2'; 
+0

Спасибо, отлично работает! Хорошо, как вы сделали сравнение с циклом. – dk123

2

Добавьте фиксированное значение в качестве столбца в запросе, и использовать вставку-выберите вместо вставки значений:

insert into table (name, action-id) 
select 'user', action from actions where name='user2'; 
0
Or can be done by procedure 
Create that procedure and run it 
create or replace procedure set_action  

в
курсор c1 является
выберите * от пользователя;
человек c1% rowtype;
имя пользователя varchar (8);
начало
имя пользователя: = 'пользователь';
для человека в цикле c1
Вставить в таблицу (имя, действие-id)
значения (имя пользователя, person.action);
конец петли;
конец;
Его можно запустить с помощью set_action;

+0

Это довольно много накладных расходов и сложность для чего-то, что легко сделать в простом SQL ... –

0

Пример:

create table testing(col1 varchar2(10), col2 varchar2(10)); 
create table testing2(col1 varchar2(10), col2 varchar2(10)); 
create table testing3(col1 varchar2(10), col2 int); 
insert into testing2 (col1, col2) values ('test2_col1', 'test2_col2'); 
insert into testing3(col1, col2) values ('steve', 1); 
insert into testing3(col1, col2) values ('brad', 2); 
insert into testing3(col1, col2) values ('chad', 3); 
insert into testing3(col1, col2) values ('nick', 1); 
insert into testing(col1, col2) 
    (select col1 ,(select col2 from testing2) from testing3); -- inserts 4 rows 

И наконец:
select * from testing; steve test2_col2 brad test2_col2 chad test2_col2 nick test2_col2

Смежные вопросы