oracle 儲存過程 編寫

2021-08-31 17:51:36 字數 2813 閱讀 6620

1、先建立乙個陣列[types]:

create or replace type p_index_list as varray(35) of number;
2、編寫儲存過程,迴圈插入資料: 

--call jdxxendingprov******ock(p_index_list(370000,370200,410000,510000),to_char(sysdate-1,'yyyy-mm-dd'));

create or replace procedure jdxxendingprov******ock(p_indexs in p_index_list, stock_date in varchar2) as

default_stock_date varchar2(20);

p_index_num number;

begin

default_stock_date := stock_date;

for x in 1 .. p_indexs.count loop

p_index_num := p_indexs(x);

delete jdxx_ending_province_stock

where stock_date = to_date(default_stock_date, 'yyyy-mm-dd')

and p_index = p_index_num;

commit;

insert into jdxx_ending_province_stock

select p_index_num as p_index,

t.pd_type_name,

to_date(default_stock_date, 'yyyy-mm-dd') as stock_date,

sum(t.count) as stock_count,

sum(t.count * t.cur_cost_price) / 10000 as stock_money

from jxc_pd t

where t.shop_id in (select t.shop_id

from entp_shop t

where t.p_index in (select t2.p_index

from base_province_list t2

where t2.del_mark = 0

start with t2.p_index = p_index_num

connect by prior t2.p_index = t2.par_index))

and t.own_sys = 1

and t.is_del = 0

group by t.pd_type_name;

commit;

end loop;

end;

3、編寫定時器,定時執行語句

grant create job to nmswxt_sw;

-- 建立job

begin

dbms_scheduler.create_job(job_name => 'schdl_base_pd_clazz',

job_type => 'stored_procedure',

job_action => 'p_base_pd_clazz',

start_date => to_date('10-05-2012 01:10:01', 'dd-mm-yyyy hh24:mi:ss'),

repeat_interval => 'sysdate+1',

comments => '重新整理商網產品類別定時任務');

end;

-- 啟用job

begin

dbms_scheduler.enable(name => 'schdl_base_pd_clazz');

end;

-- 執行job

begin

dbms_scheduler.run_job(job_name => 'schdl_base_pd_clazz',use_current_session => false);

end;

-- 停止job

begin

dbms_scheduler.disable(name => 'schdl_base_pd_clazz');

end;

-- 刪除job

begin

dbms_scheduler.drop_job(job_name => 'schdl_base_pd_clazz');

end;

repeat_interval 引數:

1/24 :一小時

1/1440 : 一分鐘

1/(3600*24) : 一秒鐘

sysdate+1 : 每天執行一次

sysdate+1/24 : 每一小時執行一次

sysdate+1/1440 : 每一分鐘執行一次

sysdate+1/(3600*24) : 每一秒鐘執行一次

sysdate+7 : 每星期執行一次

以上時間間隔不能保證任務(job)的下一次執行在乙個特定的時間,僅僅能夠指定乙個任務兩次執行之間的時間間隔。

特定日期或時間的例子:

trunc(sysdate+1) : 每天午夜12點

trunc(sysdate+1)+(8*60+30)/(24*60) : 每天早上8:30

trunc(last_date(sysdate)+1) : 每個月第1天的午夜12點

next_day(trunc(sysdate),"tuesday"+12/24) : 每星期二中午12點

二十 Oracle學習筆記 編寫儲存過程

一 編寫儲存過程 1.復用匿名 塊,我們需要使用儲存過程,函式,觸發器等,儲存過程就是封裝了乙個匿名 塊,可以通過引數進行輸入,輸出值。我們可以通過呼叫有名稱的儲存過程來復用 塊。2.格式 create or replace procedure 名稱 引數1 型別,引數2 型別 is as 變數宣告...

oracle 資料庫儲存過程編寫

儲存過程學習記錄 學習blog 建立或替換儲存過程 無參 proc attribution wskh create orreplace procedure proc attribution wskh as 定義變數,接收儲存資料 v user id varchar2 14 v mobile tel ...

mysql過程編寫 mysql儲存過程編寫(一)

首先需要知道mysql儲存過程的作用 1 儲存過程能實現較快的執行速度 2 儲存過程能過減少網路流量 3 儲存過程可被作為一種安全機制來充分利用 儲存過程的格式 create procedure 儲存過程名 過程引數 特性引數 begin endeg delimiter create procedu...