oracle資料庫觸發器,儲存過程,定時器job,package的基本用法總結
--定時器job語法引數解析
使用Submit()過程,工作被正常地計劃好。
這個過程有五個引數:job、what、next_date、interval與no_parse。
PROCEDURE Submit ( job
OUT binary_ineger,
What IN varchar2,
next_date IN date,
interval IN varchar2,
no_parse IN booean:=FALSE)
job引數是由Submit()過程返回的binary_ineger。這個值用來唯一標識一個工作。
what引數是將被執行的PL/SQL程式碼塊。
next_date引數指識何時將執行這個工作。
interval引數何時這個工作將被重執行。
no_parse引數指示此工作在提交時或執行時是否應進行語法分析——TRUE
指示此PL/SQL程式碼在它第一次執行時應進行語法分析,
而FALSE指示本PL/SQL程式碼應立即進行語法分析。
--建立定時器job:
1.定時同步資料,可用以兩臺伺服器資料庫資料的同步
declare
job number; --系統生成job標示idbegin
sys.dbms_job.submit(job,'thme_to_thme2;',sysdate,'sysdate+1/1440');
end;
1.查詢jobs的相關檢視
select job,last_date,last_sec,broken,failures,interval, what from dba_jobs
dba_jobs:系統表
job: 指的是job的id號。比如上面的 41
failures:job執行的時候失敗次數,如果超過了15次,那麼broken列將被標為Y,以後就不會執行該job了
broken:預設為N,如果為Y,意味著不再執行該job!
interval:執行job的間隔時間。
what:該job的實際工作。
2. 檢視相關job資訊
相關檢視
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在執行job相關資訊
---儲存過程例子:
1.實現表資料複製
create or replace procedure thme_to_thme2 as--無引數的過程
rownums number;--變數定義
myid number(8);
myname varchar(20) :='賦初值';
tem varchar(20);
cursor c1 is --賦值給遊標,is後面是PL/SQL體
select distinct t.nid, t.sname from T_HBM t;
begin
rownums := 0;--賦初值
if c1%isopen = false then
--開啟遊標
open c1;
end if;
loop
rownums := rownums + 1;
fetch c1 --從遊標中獲得值賦值給變數,迴圈,直到結束
into myid, myname;
exit when c1%notfound;
insert into T_HBM2(ID,Name) values(myid,myname);
if mod(rownums,2)=0 then
commit;
end if;
end loop;
end;
1.實現在刪除一條記錄複製到另外一張表
/*new是新插入的資料,old是原來的資料
insert只會有new,代表著要插入的新記錄
delete只會有old,代表著要刪除的記錄
update由於執行的是先刪除舊的記錄,再插入新的記錄,因此new和old都會有,且含義與上面的相同
*/
create or replace trigger TR_TBM
before delete on T_HBM --在增刪改成之前或之後
for each row --對錶的每一行觸發器執行一次。如果沒有這一選項,則只對整個表執行一次。
declare
counts number; --宣告變數
newid number; --宣告變數
begin
/*
select count(*)
into counts --給變數賦值
from T_HBM t
where t.nID = :new.nID; --new 表示要插入的資料物件,即T_HBM表中的一條記錄。這個模組只是舉例
if counts = 0 then
newid := seq_THBM.Nextval;
end if;
*/
insert into T_HBM_DEL (ID, NAME) values (:OLD.nid, :old.sname); --old是執行上面刪除T_HBM中的物件(一條記錄)
end TR_TBM;
1.禁止刪除某張表的資料
CREATE OR REPLACE TRIGGER "TR_HBM_DEL"
BEFORE delete ON T_HBM
begin
Raise_application_error(20001, '禁止該表資料!'); --彈出提示資訊
end;
這是平時工作中的一點小總結比較簡單。類似的很多功能可以通過上面的知識去實現。希望能對大家有點啟發!