oracle 採用游標迴圈插入資料的儲存過程

2021-06-20 02:34:33 字數 1907 閱讀 9861

--用case when else判斷是否插入隨機生成的考勤記錄

create or replace procedure mytest_restorekq as

kssj date;

jssj date;

tmpsj date;

amnum int;

pmnum int;

cursor cs is select sfz,zwbh from ncldlpx where xxid='0001' and pxqb='2013001';

begin

select pxkssj into kssj from kbqb where xxid='0001' and qb='2013001';

select pxjssj into jssj from kbqb where xxid='0001' and qb='2013001';

for c in cs loop--for迴圈巢狀while loop迴圈需插入臨時變數。

tmpsj:=kssj;

while tmpsj<=jssj loop

select count(*) into amnum from zw_kq where ksj between to_date(to_char(tmpsj,'yyyy-mm-dd')||' '||'07:00:00','yyyy-mm-dd hh24:mi:ss') and

to_date(to_char(tmpsj,'yyyy-mm-dd')||' '||'09:00:00','yyyy-mm-dd hh24:mi:ss')  and zwbh=c.zwbh and sfz=c.sfz;

select count(*) into pmnum from zw_kq where ksj between to_date(to_char(tmpsj,'yyyy-mm-dd')||' '||'17:00:00','yyyy-mm-dd hh24:mi:ss') and

to_date(to_char(tmpsj,'yyyy-mm-dd')||' '||'19:00:00','yyyy-mm-dd hh24:mi:ss')  and zwbh=c.zwbh and sfz=c.sfz;

case when amnum=0 then insert into zw_kq(ksj,type,zwbh,sfz,qdtype) values(to_date(to_char(tmpsj,'yyyy-mm-dd')||' '||'07:'||round(dbms_random.value(50,59),0)||':'||round(dbms_random.value(0,59),0),'yyyy-mm-dd hh24:mi:ss'),1,c.zwbh,c.sfz,'0');

when pmnum=0 then insert into zw_kq(ksj,type,zwbh,sfz,qdtype) values(to_date(to_char(tmpsj,'yyyy-mm-dd')||' '||'17:'||round(dbms_random.value(00,10),0)||':'||round(dbms_random.value(0,59),0),'yyyy-mm-dd hh24:mi:ss'),1,c.zwbh,c.sfz,'0');

else dbms_output.put_line('正常考勤');

end case;

--while loop 迴圈中插入case when then 語句塊,以end case 為結束標識。

tmpsj:=tmpsj+1;

end loop;

end loop;

end mytest_restorekq;

--select dbms_random.value from dual; 

--oracle dbms_random函式自動產生隨機數

--oracle dbms_random.value(0,100) 函式自動產生0——100之間隨機數

使用游標 游標FOR迴圈

游標for迴圈是在pl sql塊中使用游標最簡單的方式,它簡化了對游標的處理。當使用游標for迴圈時,oracle會隱含的開啟游標,提取游標資料並關閉游標。例子 顯示emp表所有雇員名及其工資 declare cursor emp cursor isselect ename,sal from emp...

Oracle 游標迴圈插入資料

遇到乙個需求統計歷史每個月底的資料插入到表中,查詢了資料發現使用游標會很方便,記錄一下解決思路 先查出每個月月底的日期作為條件 select to char lastday,yyyy mm dd lastday from select last day add months to date 2014...

Oracle使用游標

了解一下訪問資料庫的ddl和tcl語句 一。plsql中使用select語句,應該與into字句連用,查詢出的返回值賦予into子句中的變數 變數的宣告是在delcare中 二。type屬性 在plsql中可以將變數和常量宣告為內建或使用者定義的資料型別,以引用乙個列名,同時繼承他的資料型別和大小。...