Oracle中insert into select和select into的区别

 我来答
就烦条0o
推荐于2018-05-04 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46488
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
insert into select可以将select 出来的N行(0到任意数)结果集复制一个新表中,select into
from只能将"一行"结果复制到一个变量中。这样说吧,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;

这里增加了原始类型的变量和记录类型的变量
百度网友5e7d60f
2017-05-02 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9522
采纳率:91%
帮助的人:1376万
展开全部
Oracle中insert into select和select into的区别:
select into 就相当于赋值语句,insert into是复制语句。
在Oracle中,将一张表的数据复制到另外一个对象中。通常会有这两种方法:insert into select 和 select into from。
下面这个例子可以直观显示出二者的区别:
select * into target_table from source_table;
insert into target_table(column1,column2) select column1,5 from source_table;
以上两句都是将源表source_table的记录插入到目标表target_table,但两句又有区别。
第一句(select into from)要求目标表target_table不存在,因为在插入时会自动创建。
第二句(insert into select from)要求目标表target_table存在,由于目标表已经存在,
所以我们除了插入源表source_table的字段外,还可以插入常量,
把一张旧表里的字段复制到另外一张新表中.可以这样写sql语句
select * into 新表 from 旧表 where 新表.id=旧表.id
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
313528318
2016-11-12 · TA获得超过142个赞
知道答主
回答量:134
采纳率:20%
帮助的人:26.7万
展开全部
1.INSERT INTO SELECT语句
语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1
或者:Insert into Table2 select * from Table1
注意:(1)要求目标表Table2必须存在,并且字段field,field2...也必须存在
(2)注意Table2的主键约束,如果Table2有主键而且不为空,则 field1, field2...中必须包括主键
(3)注意语法,不要加values,和插入一条数据的sql混了,不要写成:
Insert into Table2(field1,field2,...) values (select value1,value2,... from Table1)
由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下:
+ expand sourceview plaincopy to clipboardprint

--1.创建测试表
create TABLE Table1
(
a varchar(10),
b varchar(10),
c varchar(10)
)
create TABLE Table2
(
a varchar(10),
c varchar(10),
d int
)

--2.创建测试数据
Insert into Table1 values('赵','asds','90')
Insert into Table1 values('钱','asds','100')
Insert into Table1 values('孙','asds','80')
Insert into Table1 values('李','asds',null)

select * from Table2

--3.INSERT INTO SELECT语句复制表数据部分列和常值

Insert into Table2(a, c, d) select a,c,5 from Table1
或:Insert into Table2 select * from Table1
--4.显示更新后的结果

select * from Table2

--5.删除测试表
drop TABLE Table1
drop TABLE Table2

2.SELECT INTO FROM语句
语句形式为:SELECT vale1, value2 into Table2 from Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。示例如下:
view plaincopy to clipboardprint?
--1.创建测试表
create TABLE Table1
(
a varchar(10),
b varchar(10),
c varchar(10)
)

--2.创建测试数据
Insert into Table1 values('赵','asds','90')
Insert into Table1 values('钱','asds','100')
Insert into Table1 values('孙','asds','80')
Insert into Table1 values('李','asds',null)

--3.SELECT INTO FROM语句创建表Table2并复制数据
select a,c INTO Table2 from Table1

--4.显示更新后的结果
select * from Table2

--5.删除测试表
drop TABLE Table1
drop TABLE Table2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ca97ae0
2016-05-08 · TA获得超过201个赞
知道小有建树答主
回答量:483
采纳率:51%
帮助的人:94.4万
展开全部
insert into 表名1 select 表名2:表示从表2查询数据赛到表1中
select 字段1 into 字段2 from 表名1:表示从表1中查询字段1插到临时变量字段2中
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhoudha
生活家

2016-11-19 · 知世故而不世故地生活
知道大有可为答主
回答量:2.4万
采纳率:91%
帮助的人:105万
展开全部
insert into select
是SQL文,直接在sqlplus里就可以执行。

select into
是PL/SQL中的语法,需要放在PL/SQL的逻辑块中才能被识别执行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式