Oracle中declare的⽤例
场景:如果⼀场考试有100个科⽬,每个科⽬的成绩存放在以"t_科⽬代码_1_pyjd"格式命名的表⾥⾯。
若想获取每个科⽬的阅卷进度(ksstzt不为8则为未阅),就要写100个sql,如何⽤⼀个语句查询出来呢?
看成三部分:1.declare到begin;2.begin到end;3.for循环
第⼀部分⾥⾯是:变量名+数据类型。除此之外还定义了⼀个游标cursor命名为cur,在for循环⾥遍历这个查询的结果集
第三部分中的c.kmdm是从游标中取值,into是给第⼀部分的变量赋值,dbms_output.put_line()是输出到pl/sql的output页⾯结果集
declare
res number(7);
tablename varchar2(20);
against all oddscursor cur is lect kmdm from t_jxxxb group by kmdm having count(*)=1;
begin谷歌在线翻译
good的副词
for c in cur loop
tablename:='t_'||c.kmdm||'_1_pyjd';
execute immediate 'lect count(*) from '||tablename||' where ksstzt<>8' into res;
dbms_output.put_line(c.kmdm||':'||res);
end loop;
end;
扩展declare中的if怎么⽤
吊带衫 英文
辅音音标这⾥新增需求,把已经阅完的科⽬(ksstzt=8)剔除出结果集
declare
iyinres number(7);
tablename varchar2(40);
cursor cur is lect kmdm from t_jxxxb group by kmdm having count(*)=1;
begin
for c in cur loop
tablename:='t_'||c.kmdm||'_1_pyjd';
execute immediate 'lect count(*) from '||tablename||' where ksstzt<>8' into res;
moralif res!=0 then
dbms_output.put_line(c.kmdm||':'||res);
end if;
end loop;
end;
2021年5⽉更新:
使⽤plsql批量更新数据库某表,7万多条数据会特别慢,容易内存溢出,故查询sql⽤分页,每次更新1万条,这条语句⾥还⽤到了⽐较复杂的拼接,是个很好的例⼦。
constructordeclare
北京英语口语培训班
res number(7);
colname varchar2(800);
sjmh_c varchar2(100);
cursor cur is 这⾥填底下的分页查询sql;
begin
for c in cur loop
colname:='';
sjmh_c:=c.sjmh;
for i in 1 .. c.omrcd loop
colname:=colname||'omr'||i||'||'||chr(39)||','||chr(39)||'||';
end loop;
execute immediate 'update omrtest t jmxx2='||substr(colname,0,(length(colname)-2))||' where sjmh='||chr(39)||sjmh_c||chr(39);
end loop;
choni
end;