大家好,我想问一下oracle中自动增长的列怎样设置,我查了相关资料但是没有实现,呵呵,我比较笨一点,请大家写得细一点哈
还有一个问题:怎样查询某用户下的sequence有哪些???这个,创建了不删掉有什么影响吗???当我删除一个用户的时候,是不是只要是基于本用户的所有数据都将丢失呢?????请大家多多指教哈!!^o^
还有一个问题:怎样查询某用户下的sequence有哪些???这个,创建了不删掉有什么影响吗???当我删除一个用户的时候,是不是只要是基于本用户的所有数据都将丢失呢?????请大家多多指教哈!!^o^
oracle没有自增长类型。
一般可以通过触发器和序列实现。第二问:
select object_name from user_objects
where object_type = 'SEQUENCE'
SQL> create table tab1(id number,name varchar2(20));
Table created
--创建序列
SQL> create sequence seq_id start with 1 increment by 1;
Sequence created
--创建触发器
SQL> create or replace trigger tr_tab1
2 before insert on tab1
3 for each row
4 begin
5 select seq_id.nextval into :new.id from dual;
6 end;
7 /
Trigger created
SQL> insert into tab1(name) values('aa');
1 row inserted
SQL> insert into tab1(name) values('bb');
1 row inserted
SQL> select * from tab1;
ID NAME
---------- --------------------
1 aa
2 bb
SQL>
select * from user_sequences;
--查看有权访问的序列
select * from all_sequences;
----查看数据库所有序列
select * from dba_sequences;删除用户将删除该用户拥有的所有对象。
where object_type = 'SEQUENCE';--查询某用户下的sequence有哪些
oracle sequence
insert语句中sequence的使用方法
2 before insert on tab1
3 for each row
4 begin
5 select seq_id.nextval into :new.id from dual;
6 end;
7 /
请问你可不可以给我解释一下创建触发器的这些语句啊?具体每一句的作用是什么?
谢谢哈。
before insert --触发时机:在插入数据之前触发
on tab1 --触发器基于表tab1
for each row --行级触发器:针对每行记录都触发
begin
--取序列seq_id的nextval(下一个值),作为即将插入字段id的值
select seq_id.nextval into :new.id from dual;
end;
--创建自增列
--表
create table ROI_DATAMODEL
(
ID char(4) not null,
NAME VARCHAR2(100),
CONTEXT CLOB,
PRIMARYKEYS VARCHAR2(200),
PRIMARY KEY(ID)
);
--序列
CREATE SEQUENCE seq_ROI_DATAMODEL START WITH 1 INCREMENT BY 1;
--设置触发器
CREATE OR REPLACE TRIGGER tri_ROI_DATAMODEL
BEFORE INSERT
ON ROI_DATAMODEL
FOR EACH ROW
BEGIN
select seq_ROI_DATAMODEL.nextval into :new.id from dual;
END;
--测试
INSERT INTO ROI_DATAMODEL(NAME,CONTEXT) VALUES('liu','son');
INSERT INTO ROI_DATAMODEL(NAME,CONTEXT) VALUES('liu','wife');SELECT * FROM ROI_DATAMODEL;