insert into select 的列序不同问题

xfreyes 2010-09-25 10:02:13
insert into table1 (select * from table2);

上面这种用法,在table1和table2表结构完全相同的情况下肯定没问题,但是我现在的两个表表结构几乎完全相同(字段名,字段个数和类型都相同),但是字段的顺序可能不同,这样便会出错如:
table1 (A,B,C)
table2 (A,C,B)

由于表的具体字段名和个数是不知道的,但可以确定两个表结构式一致的,请问如何解决,谢谢!
...全文
800 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xfreyes 2010-09-26
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 huangyunzeng2008 的回复:]
insert into table( A ) select ( B) from ,你在语句中让他们对应号不就完事了吗?如果类型一致,或者类型不一致,oracle能够自己转化的话,是没有问题的!
[/Quote]

问题是我不知道字段名!怎么对应。。
xfreyes 2010-09-25
  • 打赏
  • 举报
回复
再顶顶看!!
minitoy 2010-09-25
  • 打赏
  • 举报
回复
貌似没有.[Quote=引用 11 楼 xfreyes 的回复:]
只能拼sql了?没有更好一点的方法?
[/Quote]
xfreyes 2010-09-25
  • 打赏
  • 举报
回复
只能拼sql了?没有更好一点的方法?
minitoy 2010-09-25
  • 打赏
  • 举报
回复
2楼的方法需要使用动态sql自己去拼sql.
  • 打赏
  • 举报
回复
那就不知道了,等高手来
我也学习学习
xfreyes 2010-09-25
  • 打赏
  • 举报
回复
取表名我使用游标,每次循环我都可以取到的,关键是取到后,其中一些表的字段顺序不一样,如何导入?
心中的彩虹 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 xfreyes 的回复:]
insert into table1 (select * from table2);

上面这种用法,在table1和table2表结构完全相同的情况下肯定没问题,但是我现在的两个表表结构几乎完全相同(字段名,字段个数和类型都相同),但是字段的顺序可能不同,这样便会出错如:
table1 (A,B,C)
table2 (A,C,B)

由于表的具体字段名和个数是不知道的,但可以确定两个……
[/Quote]

desc tablename 便可知道表的类型以及个数
xfreyes 2010-09-25
  • 打赏
  • 举报
回复
多谢楼上,可能还是我没说清楚,其实我要操作的是多个表的导入,是写在一个存储过程中的,例如:
table_A1 到 table_A2
table_B2 到 table_B2
table_C3 到 table_C2
...
表有多少是不一定的,是要遍历的,所有这种查看的方式是不行的。
还请多出主意啊,谢谢。
zhone 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xfreyes 的回复:]

感谢2位,但1楼没看清问题,我说了表的具体字段名和个数是不知道的

2楼的办法是可以的,就是写起来有些费劲,我Oracle用的不是很熟,这个东西是要写在存储过程中的,能不能帮忙实现一下,或者谁有更简单点的办法,例如加个参数可以让导入时列名自动排序的小技巧 呵呵 谢谢了
[/Quote]

INSERT INTO table2(col1,col2,col3....) SELECT col1,col2,col3.... FROM table1;
这个不复杂的,就是指定哪列导入到哪列。你仅仅insert只插入必填项不是也得指定列名么。
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xfreyes 的回复:]
感谢2位,但1楼没看清问题,我说了表的具体字段名和个数是不知道的

2楼的办法是可以的,就是写起来有些费劲,我Oracle用的不是很熟,这个东西是要写在存储过程中的,能不能帮忙实现一下,或者谁有更简单点的办法,例如加个参数可以让导入时列名自动排序的小技巧 呵呵 谢谢了
[/Quote]不知道表的字段名和个数
可以通过desc来看啊
--例如查看emp表的字段,你可以分别看看两个表的结构,然后对应字段就可以了
SQL> desc emp;
名称 是否为空? 类型
----------------------------------------- -------- ---------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
xfreyes 2010-09-25
  • 打赏
  • 举报
回复
感谢2位,但1楼没看清问题,我说了表的具体字段名和个数是不知道的

2楼的办法是可以的,就是写起来有些费劲,我Oracle用的不是很熟,这个东西是要写在存储过程中的,能不能帮忙实现一下,或者谁有更简单点的办法,例如加个参数可以让导入时列名自动排序的小技巧 呵呵 谢谢了
gelyon 2010-09-25
  • 打赏
  • 举报
回复

表的具体字段名和个数是不知道的?那咋好对应呢?
给你个建议,通过数据字典查出表的所有栏位有哪些,
SELECT * FROM all_tab_cols WHERE table_name='TABLE1';
然后查询语句中将所有栏位按顺序查询出来,再insert
INSERT INTO table2(col1,col2,col3....) SELECT col1,col2,col3....FROM table1;
  • 打赏
  • 举报
回复
你先确定下表结构咯
然后再insert
例如表结构是这样
table1 (A,B,C)
table2 (A,C,B)
你就可以按照这样的方式插入嘛
insert into table1 select a,b,c from table2
huangyunzeng2008 2010-09-25
  • 打赏
  • 举报
回复
insert into table( A ) select ( B) from ,你在语句中让他们对应号不就完事了吗?如果类型一致,或者类型不一致,oracle能够自己转化的话,是没有问题的!

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧