Ask Your Question
4

How can I use dynamic SQL column names in a Merge/Insert statement in Oracle?

asked 2023-06-03 04:18:02 +0000

scrum gravatar image

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
1

answered 2023-06-03 04:29:01 +0000

devzero gravatar image

To use dynamic SQL column names in a Merge/Insert statement in Oracle, you can follow the below steps:

  1. Write a SQL query to generate the dynamic column names, for example:
SELECT column_name
FROM all_tab_columns
WHERE table_name = 'table_name'
AND column_id > 3;
  1. Use the above SQL query in a PL/SQL block to generate the column names as a string:
DECLARE 
   col_names VARCHAR2(200);
BEGIN
   SELECT LISTAGG(column_name,',') WITHIN GROUP (ORDER BY column_id)
   INTO col_names
   FROM all_tab_columns
   WHERE table_name = 'table_name'
   AND column_id > 3;
END;
  1. Use the generated column names in the Merge/Insert statement as follows:
MERGE INTO table_name t
USING (
   SELECT value1, value2, value3, ...
   FROM source_table
) s
ON (t.key_column = s.key_column)
WHEN MATCHED THEN 
UPDATE SET 
   t.column1 = s.column1,
   t.column2 = s.column2,
   ...
   t.columnN = s.columnN
WHEN NOT MATCHED THEN
INSERT (key_column, col_names)
VALUES (s.key_column, s.value1, s.value2, s.value3, ..., s.valueN);
edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account. This space is reserved only for answers. If you would like to engage in a discussion, please instead post a comment under the question or an answer that you would like to discuss

Add Answer


Question Tools

Stats

Asked: 2023-06-03 04:18:02 +0000

Seen: 16 times

Last updated: Jun 03 '23