oracle中序列的相关问题,insert ...... select 报错

oracle中序列的相关问题,insert ...... select 报错,第1张

语句语法应该没问题,我经常用这种方式插入,你在序列钱加入数据库OWNER名试试看,即

insert into table1(id,zd1,zd2,zd3) select 用户名sequence_idnextval, zd1,zd2,zd3 from table2

不推荐用select nvl(max(id),0) from table1 ) +1,因为如果你中间有数据删除,ID就会重新排序,对历史数据,如果涉及到流程就会错乱了

单个插入:

insert into scheduleInfo values 

(advice_sid_SEQnextval,'小米3',to_date('2016-10-01','yyyy-MM-dd'),'细雨','1053246328@qqcom','15981342565','珠海')

多个插入:

先创建一个函数:

create or replace function f_getseqkey return number is

result number;

begin

select advice_sid_SEQnextval into result from dual ;

return result ;

end;

执行多个插入:

insert ALL  

into scheduleInfo values(keys,'小米3',to_date('2016-10-01','yyyy-MM-dd'),'细雨','1053246328@qqcom','15981342565','珠海1'||keys)

into scheduleInfo values(keys,'小米3',to_date('2016-10-01','yyyy-MM-dd'),'细雨','1053246328@qqcom','15981342565','珠海2'||keys)

into scheduleInfo values(keys,'小米3',to_date('2016-10-01','yyyy-MM-dd'),'细雨','1053246328@qqcom','15981342565','珠海3'||keys)

into scheduleInfo values(keys,'小米3',to_date('2016-10-01','yyyy-MM-dd'),'细雨','1053246328@qqcom','15981342565','珠海4'||keys)

SELECT f_getseqkey() keys FROM DUAL;

知识点: insert Allselect

你可以先建一个序列

再建个触发器

触发器

create trigger 名

before insert on 表名

for each row

begin

select 序列名nextval into :new表列名 from dual;

end

这样就OK了

序列号被调用时,它会自动采取增加oracle的顺序,通常使用在由地方排序所需的序列号每次。

1,创建序列

你必须先有CREATE SEQUENCE或CREATE ANY SEQUENCE权限,

CREATE SEQUENCE emp_sequence

递增1 - 加几每个

从1开始 - 从一开始计数

NOMAXVALUE - 不设最高

NOCYCLE - 一直累加,不循环CACHE

10;

一旦定义emp_sequence,你可以使用CURRVAL,NEXTVAL

CURRVAL =返回序列添加

NEXTVAL =值序列的当前值,然后返回序列价值观

如:

emp_sequenceCURRVAL

emp_sequenceNEXTVAL

可以使用的地方顺序:

- 不包含子查询,SELECT语句

快照,看 - INSERT语句中的子查询 BR> - NSERT VALUES语句中

- 在

UPDATE的SET可以看到下面的例子:

INSERT INTO EMP VALUES

(empseqnextval,“刘易斯”,“秘书”,7902 ,SYSDATE,1200,NULL,20);

SELECT empseqcurrval FROM DUAL;

然而,需要注意的是:

- 首先NEXTVAL返回初始值;随后的NEXTVAL会自动增加你的增量定义BY值,然后返回增加值。 CURRVAL SEQUENCE总是返回当前值,但之后的第一个NEXTVAL初始化使用CURRVAL,否则会出错。一个NEXTVAL会增加SEQUENCE的值,所以如果你使用多个NEXTVAL相同的语句中,该值是不一样的。明白了吗?

- 如果指定CACHE值,ORACLE可以预先放置一些序列在内存里面,所以更快的访问。服用后里面缓存,Oracle自动再取一组到缓存中。使用高速缓冲存储器的可能跳号,如一个数据库停机突然不正常(关机中止),该序列中的高速缓存都将丢失。这种情况下,可以防止当与非缓存创建序列。

2,阿尔特序列

你还是主人的序列,或者有ALTER ANY SEQUENCE权限来改变顺序。你可以改变的参数启动顺序删除所有外面。如果你想改变的初始值,必须删除序列,然后重新创建的

ALTER SEQUENCE emp_sequence

递增的例子

阿尔特序列10

MAXVALUE 10000

CYCLE - 10000刮

NOCACHE后;点击看详细的初始化参数影响顺序:

SEQUENCE_CACHE_ENTRIES =设置序列可以同时缓存的数量。

可以很简单的拖放序列

DROP SEQUENCE order_seq;

例如序列:

CREATE SEQUENCE SCOTTDMIFPOSTID

START WITH 261

递增1

NOMINVALUE

NOMAXVALUE

NOCYCLE

CACHE 20

NOORDER

3,如何使用第一种方法

:一般需要创建触发器(TRIGGER),使得插入产生的运行顺序号增量数据之前。

示例触发

- 创建表

创建表TEST

(SEQ

INTEGER NOT NULL,

NAME VARCHAR2(20),

PWD VARCHAR2(20)

表空间USERS

和pctfree 10

INITRANS 1

MAXTRANS 255

存储

初始64K

MINEXTENTS 1

MAXEXTENTS无限

);

- 创建/重新创建小学,独特的外键约束

改变表TEST

添加约束PK_TEST主键(SEQ)

使用指数

表空间USERS

和pctfree 10

INITRANS 2

MAXTRANS 255

存储

初始64K

MINEXTENTS 1

MAXEXTENTS无限

);

创建或插入之前重新触发TI_TEST

上测试

的每一行

声明

- 局部变量这里

开始

SELECT SEQ_TESTNEXTVAL

INTO :NEWSEQ

FROM DUAL;

结束TI_TEST;

插入语句插入测试值('AA','AA');

第二种方法:当您插入数据您可以直接调用。

插入到表(ID,姓名)值(seq_namenextval,'名');

以上就是关于oracle中序列的相关问题,insert ...... select 报错全部的内容,包括:oracle中序列的相关问题,insert ...... select 报错、oracle:插入数据,日期类型报错!、Oracle中SELECT TableName .nextval FROM DUAL 生成的主键怎么会是数据库中已经存在的,导致插入数据失败等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9325018.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存