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中这样做。