首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

job里头执行DDL语句

2012-09-29 
job里面执行DDL语句项目中用到几个编号。之前曾经做了 根据序列去取值,然后在程序中 去组合字符串生成编号,

job里面执行DDL语句

项目中用到几个编号。之前曾经做了 根据序列去取值,然后在程序中 去组合字符串生成编号,但是总觉得不怎么好、后来干脆每天把序列删了重建。采用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;BEGINDBMS_JOB.SUBMIT(:housenojob,'housenopro;',sysdate,'sysdate+1'); COMMIT;END;/

?

?

4执行job

variable housenojob number;BEGINDBMS_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 语句,因为需求有时候需要在程序中去创建一些东西,以后赋予相对应的权限就行了。

热点排行