Oracle使用游標批量更新表資料

2021-08-19 20:18:11 字數 1711 閱讀 4541

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...