2018-10-24 Oracle中insert into select和select into的用法

两张表进行数据的拷贝,最常用的拷贝语句是:

insert into select 和 select into from

但是请绝对的注意:

在Oracle中select into from不可以使用-----原因很简单:select into是PL/SQL language 的赋值语句!如果使用则Oracle会抛出0RA-00905:missing keyword的异常!

但是可以用create table select代替该功能!!!具体参考下面测试代码!

但是在Sql Server中可以正常使用。

先做个小测试:

-- 建表 create table test1( id number primary key, testname varchar2(20), createtime date, falg varchar2(10) );

create table test2( id number primary key, testname varchar2(20), createtime date, falg varchar2(10) );

-- 插入测试数据 insert into test1 values(1,'测试数据1....1',sysdate-2,'N'); insert into test1 values(2,'测试数据1....2',sysdate-2,'N'); insert into test1 values(3,'测试数据1....3',sysdate-2,'N'); commit; -- 使用insert into select 拷贝数据(注意红色部分,可以自动生成id序列值) insert into test2(id,testname,createtime,falg) select seq_test.nextval,t1.testname,t1.createtime,t1.falg from test1 t1; -- 使用 create table select 创建被拷贝数据(注意要删除test2表先) create table test2 as select t1.id,t1.testname,t1.createtime,t1.falg from test1 t1;

-- select into from 不可以,抛异常 select t1.id,t1.testname,t1.createtime,t1.falg into test2(id,testname,createtime,falg) from test1 t1;

-- PL/SQL language 中select into赋值语句的测试使用 create or replace procedure test1_prod is aa varchar2(100); begin select t1.testname into aa from test1 t1 where id=1; dbms_output.put_line('t1.testname= '|| aa); end;

总结:

数据拷贝,建议使用insert into select;

使用insert into select时如果对拷贝表生成id序列值,需要在select中以查询出的形式从sequence中查询出,再插入拷贝表;比如:

insert into test2(id,testname,createtime,falg) select seq_test.nextval,t1.testname,t1.createtime,t1.falg from test1 t1;

典型从test1表查询出数据插入test2表,test2要自动插入id,看上面代码,id要在select中先从sequence中查询出了!!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IMWeb前端团队

bash 的条件和循环

本文作者:IMWeb 江源 原文出处:IMWeb社区 未经同意,禁止转载 原文 条件语句和循环可以统称为流程控制,是一门语言最基础的部分。 bash ...

19260
来自专栏程序员叨叨叨

【PHP】Propel的使用,看这一篇就够了

本文为学习Propel框架使用的笔记,默认已经安装好Propel环境,若有读者不知如何安装Propel,可参考《听说你PHP配置Composer遇到了一些困境》...

48550
来自专栏芋道源码1024

数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 路由(二)之分库分表路由

本文主要基于 Sharding-JDBC 1.5.0 正式版 1. 概述 2. SQLRouteResult 3. 路由策略 x 算法 4. SQL 路由 5....

89960
来自专栏Java帮帮-微信公众号-技术文章全总结

第二十九天-加强1-Junit&类加载&反射&Properties&BeanUtils&xml&动态代理&数据库【悟空教程】

第二十九天-加强1-Junit&类加载&反射&Properties&BeanUtils&xml&动态代理&数据库【悟空教程】

23270
来自专栏数据结构与算法

SPOJ1043 GSS1(线段树)

注意查询的时候不能按照以前的方式写,因为不知道变量的下界,最稳妥的办法就是判三种情况

10910
来自专栏chenssy

【死磕Sharding-jdbc】---结果合并

接下来以执行 SELECT o.*FROM t_order o whereo.user_id=10order byo.order_id desc limit 2...

12730
来自专栏Hongten

python开发_pickle

pickle模块使用的数据格式是python专用的,并且不同版本不向后兼容,同时也不能被其他语言说识别。要和其他语言交互,可以使用内置的json包使用pickl...

11520
来自专栏机器学习从入门到成神

Java知识点总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

20210
来自专栏PHP在线

mysql学习笔记

InnoDB引擎与MyISAM引擎 mysql是关系型数据库。其中的存储引擎可以show engines来查看。我的版本是5.6.26的,查看版本用selec...

29150
来自专栏Greenplum

Greenplum 对JSON的支持

源文章:http://www.postgresqltutorial.com/postgresql-json/

8510

扫码关注云+社区

领取腾讯云代金券