语句语法应该没问题,我经常用这种方式插入,你在序列钱加入数据库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 isresult number;
begin
select advice_sid_SEQnextval into result from dual ;
return result ;
end;
执行多个插入:
insert ALLinto 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 生成的主键怎么会是数据库中已经存在的,导致插入数据失败等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)