SQL命令未正确结束

时间:2009-09-30 07:51:42

标签: sql oracle dynamic-sql

我在下面点击这一行时得到的sql命令没有正确结束。我想用表B中的数据插入到表A中。它们都具有相同的列,但序列可能不同。 TIA!

Insert into a (select column_name from user_tab_columns where table_name = 'B')
select * from b

我正在使用pl / sql开发人员。

3 个答案:

答案 0 :(得分:3)

在plsql过程中使用动态SQL。循环遍历游标中的列名称for循环并将它们添加到字符串中。然后执行查询。请参阅下面的代码(未测试)

declare
   l_query varchar2(32767);
   l_columns varchar2(32767);

   cursor c is select column_name
    from user_tab_columns
    where table_name=&table_name;

begin
   for r in c loop
     l_columns := l_columns ||','||r.columns_name;
   end loop;
   -- remove first ','
   l_columns := substr(l_columns,2);

   l_query := 'insert into a ('||l_columns||') select '||l_columns||' from &table_name;

   execute immediate l_query;
end;

答案 1 :(得分:1)

在类似情况下,我在目标表上创建了一个视图,该视图具有适当顺序的列。

例如

Table A has columns (A, B, C)
Table B has columns (B, C, A)

您可以创建类似

的视图
CREATE VIEW A_V AS SELECT B,C,A FROM A;

然后你可以做insert into a_v select * from b;

优点是,即使将列添加到表a但不添加到表b,只要它们可以为空或具有默认值,通过视图的插入仍然有效。

我自动创建了CREATE VIEW脚本,针对表B查看USER_TAB_COLUMNS。

答案 2 :(得分:0)

这可能会做你想要的。

INSERT INTO a (col1, col2)
SELECT col1, col2
FROM b