日期:2014-05-16 浏览次数:20520 次
项目中用到几个编号。之前曾经做了 根据序列去取值,然后在程序中 去组合字符串生成编号,但是总觉得不怎么好、后来干脆每天把序列删了重建。采用Oracle 的 的job 来定期执行该任务。
1 创建序列
??
create sequence houseno increment by 1 start with 1 maxvalue 1000;
?
2 创建过程
create or replace procedure housenopro as tsql varchar2(100); Begin tsql:=' drop sequence houseno '; execute immediate tsql; tsql:='create sequence houseno increment by 1 start with 1 maxvalue 1000'; execute immediate tsql; end; /
?
?3 建立job
variable housenojob number; BEGIN DBMS_JOB.SUBMIT(:housenojob,'housenopro;',sysdate,'sysdate+1'); COMMIT; END; /
?
?
4执行job
variable housenojob number; BEGIN DBMS_JOB.SUBMIT(:housenojob,'housenopro;',sysdate,'sysdate+1'); COMMIT; END; /
?
注意,在执行2 的时候 会出现错误提示,说当前权限不够,经过多番搜索,发现了一个问题。
原来 在 Oracle 中。如果想在 匿名块 或者过程 中来执行DDL 语句时。都必须先 要把 相对应的权限(比如 create table , drop table ,create sequence ,drop sequence ,Create public synonym,
? Drop public synonym ,Create trigger,Create View, 等)直接赋给该用户,之前通过角色的授权将会失效。?
?
所以 应先登录到管理员上面。给你的当前用户授权。
Grant Create Table,Create sequence, Create trigger, Create procedure, Drop any sequence, Create public synonym, Drop public synonym to aws
?
之后,一切 ok。? 之前问同事说 不能动态执行DDL 语句,因为需求有时候需要在程序中去创建一些东西,以后赋予相对应的权限就行了。