oracle 中dbms_jobs的使用介绍:
例子:创建两张表,A1,A2。建表语句如下:
create table A1
(
id VARCHAR2(100) not null,
rq VARCHAR2(50)
)
tablespace TS_GGSJ
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
-- Create table
create table A2
(
id VARCHAR2(1000) not null,
rq VARCHAR2(50)
)
tablespace TS_GGSJ
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
编写存储过程
CREATE OR REPLACE PROCEDURE proc_copy(r in varchar2)
AS
yestday varchar2(200);
BEGIN
yestday:=r;
delete from A2;
INSERT INTO A2
SELECT * FROM A1
where rq=yestday;
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END ;
创建dbms_jobs
这样dbms_jobs就创建好了。但是有时候在创建存储过程的时候可能涉及到不同用户之间的表查询。尤其是在存储过程中拼接动态的sql语句,在最后执行动态
sql语句的时候可能会提示表或视图不存在。考虑下为什么会出现这种提示呢,明明单独执行sql的时候不会报错。
最终发现,在动态执行sql的时候要给当前用户赋予权限。不过要显示的赋予权限,假设有u1和u2两个用户。在u1用户中需要访问u2的表,那么要使用plsql登录
u2用户。然后再u2中执行赋权限语句 grant select any table to u1,这样就解决了权限提示异常。此时也不再需要Authid Current_User ,这样基本上就没啥问题了。
抓紧上班喽