Reputation: 734
I am trying to execute the below statement in one shot. Like we do it using INSERT ALL for inserting rows in a single execution. Is there any way that we can execute the below two statements in a single execution (using INSERT ALL).
INSERT
INTO TABLE_a
(
COLUMN_1,
COLUMN_2,
COLUMN_3,
COLUMN_4,
COLUMN_5,
COLUMN_6,
COLUMN_7,
COLUMN_8
)
SELECT 1234, -- unique id for this insertion
COLUMN_2,
COLUMN_3,
COLUMN_4,
COLUMN_5,
COLUMN_6,
COLUMN_7,
COLUMN_8
FROM TABLE_B
WHERE COLUMN_9=1;
INSERT
INTO TABLE_a
(
COLUMN_1,
COLUMN_2,
COLUMN_3,
COLUMN_4,
COLUMN_5,
COLUMN_6,
COLUMN_7,
COLUMN_8
)
SELECT 1235, -- unique id for this insertion
COLUMN_2,
COLUMN_3,
COLUMN_4,
COLUMN_5,
COLUMN_6,
COLUMN_7,
COLUMN_8
FROM TABLE_B
WHERE COLUMN_9=2;
Upvotes: 0
Views: 95
Reputation: 28741
Why not use OR condition ? Try this if it works for you
INSERT
INTO TABLE_a
(
COLUMN_1,
COLUMN_2,
COLUMN_3,
COLUMN_4,
COLUMN_5,
COLUMN_6,
COLUMN_7,
COLUMN_8
)
SELECT CASE WHEN COLUMN_9 = 1 THEN 1234 WHEN COLUMN_9 = 2 THEN 1235 END,
COLUMN_2,
COLUMN_3,
COLUMN_4,
COLUMN_5,
COLUMN_6,
COLUMN_7,
COLUMN_8
FROM TABLE_B
WHERE COLUMN_9=1 OR COLUMN_9=2;
Using DECODE() function as suggested by @Chris
INSERT
INTO TABLE_a
(
COLUMN_1,
COLUMN_2,
COLUMN_3,
COLUMN_4,
COLUMN_5,
COLUMN_6,
COLUMN_7,
COLUMN_8
)
SELECT DECODE(COLUMN_9,1,1234,2,1235)
COLUMN_2,
COLUMN_3,
COLUMN_4,
COLUMN_5,
COLUMN_6,
COLUMN_7,
COLUMN_8
FROM TABLE_B
WHERE COLUMN_9=1 OR COLUMN_9=2;
Upvotes: 0
Reputation: 58772
Of course, you can use in clause to collect both Id 1 and 2
and use decode to differ between 1234 and 1235:
INSERT
INTO TABLE_a
(
COLUMN_1,
COLUMN_2,
COLUMN_3,
COLUMN_4,
COLUMN_5,
COLUMN_6,
COLUMN_7,
COLUMN_8
)
SELECT decode(COLUMN_9,1,1234,2,1235),
COLUMN_2,
COLUMN_3,
COLUMN_4,
COLUMN_5,
COLUMN_6,
COLUMN_7,
COLUMN_8
FROM TABLE_B
WHERE COLUMN_9 in (1,2);
Upvotes: 1
Reputation: 520988
You may use INSERT INTO ... SELECT
with a union query:
INSERT INTO TABLE_a (COLUMN_1, COLUMN_2, COLUMN_3, COLUMN_4, COLUMN_5, COLUMN_6,
COLUMN_7, COLUMN_8)
SELECT
1234, COLUMN_2, COLUMN_3, COLUMN_4, COLUMN_5, COLUMN_6, COLUMN_7, COLUMN_8
FROM TABLE_B
WHERE COLUMN_9 = 1
UNION ALL
SELECT
1235, COLUMN_2, COLUMN_3, COLUMN_4, COLUMN_5, COLUMN_6, COLUMN_7, COLUMN_8
FROM TABLE_B
WHERE COLUMN_9 = 2
This approach has one noticeable advantage over your original approach. With this answer, the entire insert is happening in a single statement.
Upvotes: 0