我在插入数据方面遇到了问题。
假设我们有两张桌子。
第一个表格如下:
Table:customer
Column:a b c d e f
第二个是
Table:customer2
Column:a b c d e f g
如您所见,它们是相同的,只是在第二个表上添加了一列。
现在我正在尝试执行这个sql语句。
Insert into customer
Select * from customer2
你会在不假思索的情况下知道结果。
是否有任何方法可以完成这项工作。 我的意思是需要将customer2表上的数据插入到表customer中,将g列放在一边。
不允许列出列名,因为这是按顺序完成的。 oracle服务器上存在数十个具有各种列名的varios表。
只允许使用纯SQL ...
答案 0 :(得分:3)
只允许使用纯SQL
在 SELECT 语句中包含所需的列列表也是纯SQL 。使用优秀的文本编辑器在SELECT语句中列出所需的列名称应该不是一项艰巨的任务。对于开发人员来说,这不应该是一个借口。
Insert into customer
Select a, b, c, d, e, f from customer2;
更新构建 INSET SELECT .. 脚本的示例。
使用 USER_TAB_COLS 视图和 LISTAGG 功能(或11g之前的等效功能),我可以构建插入脚本:
SQL> CREATE TABLE emp1 AS SELECT * FROM emp WHERE 1 = 2;
Table created.
SQL>
SQL> set linesize 150
SQL>
SQL> SELECT 'INSERT INTO emp1('
2 ||listagg(column_name, ',') WITHIN GROUP (
3 ORDER BY column_name)
4 ||') SELECT '
5 ||listagg(column_name, ',') within GROUP (
6 ORDER BY column_name)
7 ||' FROM emp' insert_script
8 FROM user_tab_cols
9 WHERE table_name='EMP';
INSERT_SCRIPT
---------------------------------------------------------------------------------------------------------------------------
INSERT INTO emp1(COMM,DEPTNO,EMPNO,ENAME,HIREDATE,JOB,MGR,SAL) SELECT COMM,DEPTNO,EMPNO,ENAME,HIREDATE,JOB,MGR,SAL FROM emp
SQL>
所以,我的插入脚本已经准备好了。现在让我们'测试一下:
SQL> SELECT COUNT(*) FROM emp1;
COUNT(*)
----------
0
SQL>
SQL> INSERT INTO emp1(COMM,DEPTNO,EMPNO,ENAME,HIREDATE,JOB,MGR,SAL)
2 SELECT COMM,DEPTNO,EMPNO,ENAME,HIREDATE,JOB,MGR,SAL FROM emp;
14 rows created.
SQL>
SQL> SELECT COUNT(*) FROM emp1;
COUNT(*)
----------
14
SQL>
完美无缺!
答案 1 :(得分:1)
确定..
但是如果你想在许多这样的表中进行这个操作,那么PL / SQL会有很大的帮助,如果PLSQL超出了你的范围,你可以使用USER_TAB_COLS,你可以在这两个表中获得列,然后在insert语句中使用以下内容。所有这些都是在sql insert查询中动态完成的。
答案 2 :(得分:0)
只需执行以下操作
Insert into customer
Select a, b, c, d, e, f from customer2;