sequence避免主键唯一约束

---为某个新加的表创建序列
create sequence S_ESP_N
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
nocache;

---使用序列
SELECT empseq.currval FROM DUAL;
SELECT empseq.Nextval FROM DUAL;

---为用户授予创建序列的权限
GRANT CREATE ANY sequence TO OAIS

---使用存储过程为已存在数据ESP_N的表创建序列
create or replace procedure createS(a out number) is
cursor structureIdsCur is SELECT distinct(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE

(table_name,'_CHILDREN',''),'ESP_',''),'_PARENT',''),'_RULE_CONTENT',''),'_RULE_PACKAGE',''),'_TAMP','')) as id FROM USER_TABLES WHERE TABLE_NAME LIKE 'ESP_%' ;
oneId structureIdsCur%rowtype ;
tablename varchar2(100);
str varchar2(100);
strsql varchar2(500);
stat number ;
cou number ;
begin
for oneId in structureIdsCur loop
tablename:= 'esp_' || oneId.id ;
str:= 'select count(*) as int from tab where tname=upper('''|| tablename||''')' ;
dbms_output.put_line(str);
execute immediate str into cou ;
if cou>0 then
begin
strsql:= 'select nvl(max(id),1) from ' || tablename ;
--dbms_output.put_line(strsql);
execute immediate strsql into stat ;
strsql:='create sequence seq_' || tablename || ' minvalue 1 maxvalue 999999999999999999999999999 start with '|| stat ||' increment by 1 nocache';
--dbms_output.put_line(strsql);
execute immediate strsql;
end;
end if ;
end loop ;

end createS;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值