oracleinsert(oracle insert into select)

更新时间:2023-02-28 19:55:01 阅读: 评论:0

oracle inrt需要注意字段顺序吗?

如果是:

inrtintotabnamevalues(xxx)

的写法,要完全按照表中字段的顺序来写


如果是

inrtintotabname(字段列表)values(xxx)

那么,字段列表和值列表的顺序一致即可


我是一个初学者,如何向oracle数据库表中插入数据

工具/材料:电脑,oracle数据库表

1.例test表中有如下数据。

2.插入一条id为6,name为杨七的数据。inrt into testvalues (6,'杨七');commit。

3.向表中复制一条目前表中id为1的数据,可用如下语句:inrt into test lect * from test where id=1;commit;在执行inrt语句后,必须提交,即commit,否则不成功。


oracle中inrt如何带条件添加数据?

如果
数据不存在,那么执行插入的操作。
数据已经存在, 那么就不插入(可能是只做更新处理, 也可能什么事情都不干)

下面是一个例子代码:

--源表
CREATETABLEtest_from(idINT,valVARCHAR(20));

--目标表
CREATETABLEtest_to(idINT,valVARCHAR(20));

--插入源表
INSERTINTOtest_fromVALUES(1,'A');
INSERTINTOtest_fromVALUES(2,'B');

--合并源表到目标表
MERGEINTOtest_to
USINGtest_from
ON(test_to.id=test_from.id)--条件是id相同
WHENMATCHEDTHENUPDATESETtest_to.val=test_from.val--匹配的时候,更新
WHENNOTMATCHEDTHENINSERTVALUES(test_from.id,test_from.val)--源表有,目标表没有,插入

--第一次检查目标表数据.
SQL>SELECT*FROMtest_to;

IDVAL
------------------------------
1A
2B

--更新源表
UPDATEtest_fromSETval='A2'WHEREid=1;
--删除源表
DELETEFROMtest_fromWHEREid=2;
--插入源表
INSERTINTOtest_fromVALUES(3,'C');

--合并源表到目标表
MERGEINTOtest_to
USINGtest_from
ON(test_to.id=test_from.id)--条件是id相同
WHENMATCHEDTHENUPDATESETtest_to.val=test_from.val--匹配的时候,更新
WHENNOTMATCHEDTHENINSERTVALUES(test_from.id,test_from.val)--源表有,目标表没有,插入

--再次检查目标表数据.
SQL>SELECT*FROMtest_to;

关于oracle inrt的效率问题

1)确定a表是否有索引,触发器,约束,如果有禁用它们。这个很重要。
2)先要确定你查询语句的效率,和返回的记录数
lect xx1,xx2,xx3,decode(xx4,xx5,xx6) from b where b.xx1 in (xx,xxx)
你这条查询语句的速度有多快,需要多久才能返回数据,返回多少数据.
如果返回的数据量比较大,你要考虑到a表的extent的分配问题,也就是说你需要提前分配extent给表a
3)你可以将a表所在的表空间在a表插入数据的时候,将a表所在的表空间启用到no logging状态
4)inrt /*+append*/ into a lect xx1,xx2,xx3,decode(xx4,xx5,xx6) from b where b.xx1 in (xx,xxx) 使用oracle的direct inrt语句插入数据提高效率
5)如果数据量非常大,又不想使用上面的方法插入a表的话,
你可以
create table aa as
lect xx1,xx2,xx3,decode(xx4,xx5,xx6) from b where b.xx1 in (xx,xxx)
建个aa 表,然后将aa表改名即可

ORACLE INSERT触发器如何写

createorreplacetriggerabc

beforeinrtonic_purchain_b

foreachrow

when(new.norigtaxprice<>new.ntaxnetprice)

begin

:new.norigtaxprice:=:new.ntaxnetprice;

:new.norigprice:=:new.nnetprice;

end;

oracle中inrt语句怎么嵌入lect

inrt into lect可以将lect 出来的N行(0到任意数)结果集复制一个新表中,lect into
from只能将"一行"结果复制到一个变量中。这样说吧,lect 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)
);

接着,插入测试数据

inrt into t_source values(1,'测试数据1....1',sysdate-2,'N');
inrt into t_source values(2,'测试数据1....2',sysdate-2,'N');
inrt into t_source values(3,'测试数据1....3',sysdate-2,'N');
commit;

测试inrt into lect 操作

inrt into test2 lect * from t_source where id=1;
commit;

测试lect into 操作
因为lect into是一个plsql语言中的复制语句,和:=实现的目标一样。

create or replace procedure sp_sync_test is
aa varchar2(100);
v_record t_source%rowtype;
begin
lect t1.testname into aa from t_source t1 where id = 1;
dbms_output.put_line('普通变量 t1.testname= ' || aa);

lect t1.* into v_record from t_source t1 where id = 1;
dbms_output.put_line('记录变量 t1.testname= ' || v_record.testname);

end;

这里增加了原始类型的变量和记录类型的变量

本文发布于:2023-02-28 18:49:00,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/167758530145088.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:oracleinsert(oracle insert into select).doc

本文 PDF 下载地址:oracleinsert(oracle insert into select).pdf

标签:oracle   oracleinsert   select   insert
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|