Oracle中declare的用例

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

场景:如果一场考试有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);
  cursor cur is select kmdm from t_jxxxb group by kmdm having count(*)=1;
begin
   for c in cur loop
       tablename:='t_'||c.kmdm||'_1_pyjd';
       execute immediate 'select count(*) from '||tablename||' where ksstzt<>8' into res;
       dbms_output.put_line(c.kmdm||':'||res); 
   end loop;
end;

扩展declare中的if怎么用
这里新增需求,把已经阅完的科目(ksstzt=8)剔除出结果集

declare
  res number(7);
  tablename varchar2(40);
  cursor cur is select kmdm from t_jxxxb group by kmdm having count(*)=1;
begin
   for c in cur loop
       tablename:='t_'||c.kmdm||'_1_pyjd';
       execute immediate 'select count(*) from '||tablename||' where ksstzt<>8' into res;
       if res!=0 then
           dbms_output.put_line(c.kmdm||':'||res);      
         end if; 
   end loop;
end;

2021年5月更新:
使用plsql批量更新数据库某表,7万多条数据会特别慢,容易内存溢出,故查询sql用分页,每次更新1万条,这条语句里还用到了比较复杂的拼接,是个很好的例子。

declare
       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 set jmxx2='||substr(colname,0,(length(colname)-2))||' where sjmh='||chr(39)||sjmh_c||chr(39);
       end loop;
end;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/36190.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注