两张表进行数据的拷贝,最常用的拷贝语句是:
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中查询出了!!
在Oracle中,将一张表的数据复制到另外一个对象中。通常会有这两种方法:insert into select 和 select into from。
前者可以将select 出来的N行(0到任意数)结果集复制一个新表中,后者只能将"一行"结果复制到一个变量中。这样说吧,select into是PL/SQL language 的赋值语句。而前者是标准的SQL语句。
做一个简单测试,我们就可以很容易地看出两者的差别。
首先,我们创建两个表,一个作为源表,一个作为目标表。
- create table t_source(
- id number primary key,
- testname varchar2(20),
- createtime date,
- flag varchar2(10)
- );
- create table t_target(
- id number primary key,
- testname varchar2(20),
- createtime date,
- flag varchar2(10)
- );
接着,插入测试数据
- insert into t_source values(1,'测试数据1....1',sysdate-2,'N');
- insert into t_source values(2,'测试数据1....2',sysdate-2,'N');
- insert into t_source values(3,'测试数据1....3',sysdate-2,'N');
- commit;
测试insert into select 操作
- insert into test2 select * from t_source where id=1;
- commit;
测试select into 操作
因为select into是一个plsql语言中的复制语句,和:=实现的目标一样。
- create or replace procedure sp_sync_test is
- aa varchar2(100);
- v_record t_source%rowtype;
- begin
- select t1.testname into aa from t_source t1 where id = 1;
- dbms_output.put_line('普通变量 t1.testname= ' || aa);
- select t1.* into v_record from t_source t1 where id = 1;
- dbms_output.put_line('记录变量 t1.testname= ' || v_record.testname);
- end;
这里增加了原始类型的变量和记录类型的变量,便于大家理解。
相关推荐
ORACLE INSERT INTO SELECT *FROM 分批提交例子
select into 和 insert into select 两种表复制语句 第一句(select into from)要求目标表(destTbl)不存在,因为在插入时会自动创建 第二句(insert into select from)要求目标表(destTbl)存在,由于目标表...
本文是mysql 数据库 问题一 将表一的数据导入表二...在表中插入数据时,某一字段取数据库中该字段的最大值,并+1,这个问题很多人都说用存储过程什么的解决,其实使用insert 和 select 结合就可以很好的解决这个问题啊
1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,…) select value1,value2,… from Table1 或者:Insert into Table2 select * from Table1 注意:(1)要求目标表Table2必须存在,并且...
Oracle 分区技术及大数据量操作性能优化.ppt
Oracle INSERT 语句 方法1 ...其实, Oracle 还支持下面的写法,作用和上面的语句完全相同。 INSERT INTO (SELECT employee_id, name FROM employees) VALUES (2, 'Lisi'); 方法3 此外,同其他数据
今天小编就为大家分享一篇关于insert和select结合实现"插入某字段在数据库中的最大值+1"的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
但是,标准的SQL命令,比如"Select"、 "Insert"、 "Update"、 "Delete"、 "Create"和 "Drop"常常被用于完成绝大多数数据库的操作。MS SQL Server 就是用的Transact- SQL。SQL语言有着非常突出的优点,SQL语言是非...
在实际生产环境下,有时需将超大规模数据(如超过2亿条)导入分区表,但因原表与目的分区表的字段不一致,且用Kettle等转换工具极易失败,而用insert into select t1,t2.. from tab的Oracle SQL方式直接执行将导致...
首先在数据库中创建存储过程和方法,然后调用创建好的存储过程,生成带有与表名及字段相关的insert,update,delete语句,变量与表字段名相同,例如: "insert into temp (col1,col2,col3) values ('"+col1+"','"+col2...
解析oracle对select加锁的方法以及锁的查询一、oracle对select加锁方法 代码如下:create table test(a number,b number);insert into test values(1,2);insert into test values(3,4);insert into test values(8,9);...
最近在往数据库中插入时间时,Oracle报“无效的月份问题”,具体SQL如下: 代码如下:INSERT INTO TS_COUNT ( ID,CNAME, STARTTIME, ENDTIME,VALUE ) VALUES ( 1, ‘John’, ’01/06/2013′, ’02/06/...
INSERT INTO departments VALUES(103,'机电工程','3号教学楼'); 连接查询时使用: INSERT INTO departments VALUES(104,'工商管理','4号教学楼'); 例3.3_21 添加teachers记录 教师记录: INSERT INTO teachers ...
oracle 数据库所有示例 --有...insert into student values((select nvl(max(sid),0)+1 from Student),?,?) ----------------------------------------------------------------------------- --以下编号自增长触发器
Connect scott/****@myoracle AS SYSDBA create USER goupiaoXT IDENTIFIED BY passward DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP; grant connect to goupiaoXT; grant resource to goupiaoXT; ...
里面是ORACLE SQL 优化时会用到的hint示例汇总。总共有30个hint。 全部都是hint说明及示例。下面展示一个示例。 /*+noappend*/ 通过在插入语句生存期内停止...insert /*+noappend*/ into test1 select * from test4 ;
\WEB-INF\classes\properties目录下db.properties修改oracle数据库配置。访问地址localhost:8080/export/export1 sql必须包含rownum rownum_ 如 select rownum rownum_ ,t.* from user t;如果想要源码或者mysql版本...
从就业与择业的角度来讲,计算机相关专业的大学生从事oracle方面的技术是职业发展中的最佳选择。 其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的...