oracle使用游標批量更新表資料:
begin
for jsc in
( select js.*
from sf_jmmjjs_t js,sf_ebzcb_t cb,sf_jmyh_t yh
where
js.yhbh=cb.yhbh and js.mjbh=cb.mjbh and js.cnq=cb.cnq
and js.yhbh=yh.yhbh
and js.ysje = 0
and js.sfmj>0
and js.gnzt = '正常'
and js.zf = 0
and js.cnq = '2016-2017'
and cb.zt=2
and yh.sfebz='是'
and yh.zf=0
and yh.gnzt = '正常'
)loop
update sf_jmmjjs_t
set ysje=(case when round(jsc.mjys*jsc.jsbl+jsc.jlys,0)>jsc.mjys
then jsc.mjys
else
round(jsc.mjys*jsc.jsbl+jsc.jlys,0)
end)
where sf_jmmjjs_t.bh=jsc.bh;
end loop;
end;
commit;
補充:
游標的另一種寫法:
簡單寫個結構
create or replace function sf_znj_f
( v_yhlx varchar2, --使用者型別
v_mjbh sf_jmsf_t.yhbh%type, --使用者編號
v_fylb sf_jmsf_t.fylb%type, --費用類別
v_jsrq sf_jmsf_t.jfrq%type, --交費日期
v_cnq sf_jmsf_t.cnq%type
) return number is
v_middate date;
result number;
--查詢開始計算滯納金開始之後是否有交費
cursor jmmjjf_c is
select jfrq, jfje, znj
from sf_jmsf_t
where jfrq > v_ksrq and cnq = v_cnq and yhbh = v_yhbh and zf = 0 and
fylb = v_fylb
order by jfrq;
begin
open jmmjjf_c;
fetch jmmjjf_c
into v_jfrq, v_jfje, v_znj;
--如果沒有交費記錄
if jmmjjf_c%notfound then
******
end if;
else
--如果有交費記錄
while jmmjjf_c%found loop
***xx
fetch jmmjjf_c
into v_jfrq, v_jfje, v_znj;
end loop;
close jmmjjf_c;
end sf_znj_f;
Oracle使用游標更新資料
使用游標修改資料 定義乙個游標,游標名稱為 mycursor 更新scott使用者中emp表中empno為7369的銷售額 created on 2015 11 30 by zhanw declare he emp rowtype cursor mycursor pid integer is sel...
Oracle使用游標
了解一下訪問資料庫的ddl和tcl語句 一。plsql中使用select語句,應該與into字句連用,查詢出的返回值賦予into子句中的變數 變數的宣告是在delcare中 二。type屬性 在plsql中可以將變數和常量宣告為內建或使用者定義的資料型別,以引用乙個列名,同時繼承他的資料型別和大小。...
SqlServer 利用游標批量更新資料
游標在有時候會很有用,在更新一部分不多的資料時,可以很方便的更新資料,不需要再寫乙個小工具來做了,直接寫 sql 就可以了 下面來看乙個實際示例 宣告字段變數 declare regioncode int declare regionname nvarchar 64 declare province...