Sql 插入数据而不命名列

Sql 插入数据而不命名列,sql,oracle,Sql,Oracle,我在插入数据时遇到问题 假设我们有两张桌子 第一个表如下: 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表上的数据需要

我在插入数据时遇到问题

假设我们有两张桌子

第一个表如下:

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

只允许使用纯sql

SELECT语句中具有所需的列列表也是纯SQL。使用好的文本编辑器在SELECT语句中列出所需的列名应该不是一项困难的任务。对于开发者来说,这不应该成为借口

Insert into customer 
Select a, b, c, d, e, f from customer2;
更新构建插入选择..脚本的示例

使用USER\u TAB\u 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>
很好用

只需执行以下操作

Insert into customer 
Select a, b, c, d, e, f from customer2;
好的

  • 如果可以在查询中硬编码表名,我相信也可以用列名构造查询

  • 但是,如果您希望在许多这样的表中执行此操作,那么PL/SQL将非常有帮助。如果PLSQL不在您的范围内,您可以使用USER\u TAB\u COLS,从中获取两个表中的列,然后在insert语句中使用以下命令。所有这些都可以在sql insert查询本身中动态完成。

    我知道这一点。问题是数据库中的各个表的列名都不同。不同的表、不同的列名、不同的插入查询。我看不出这是个什么问题?如果在纯SQL中也可以这样做,那么不应该在PL/SQL中这样做。