1. 程式人生 > >關於Oracle中dbms_jobs的使用,異常:表或檢視不存在

關於Oracle中dbms_jobs的使用,異常:表或檢視不存在

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 ,這樣基本上就沒啥問題了。

抓緊上班嘍