create or replace procedure Getyc is
  v_id VARCHAR2(36);
  v_date VARCHAR2(4);

begin
  declare
    begin
      for i in (select
           c.xqbm
      from T_BAS_GCJBXX c
     where c.id in (select a.id
                      from T_BAS_GCJBXX a
                     where a.scszbg = 1
                    minus
                    select b.gcid
                      from T_BAS_SZRBJCXX b
                     where TO_CHAR(b.bgrq, 'YYYY/MM/DD') =
                           TO_CHAR(SYSDATE, 'YYYY/MM/DD')) group by c.xqbm) LOOP
                           v_id := SYS_GUID();
                           insert into T_BGYCSBJL (ID, SSXQ, BGRQ, DQZT, SBSJ, DXFSZT, BGLX) VALUES(v_id,i.xqbm,SYSDATE,0,SYSDATE,0,0);
                           insert into T_RBYCSBMX(ID, SBJLID, DQZT, SBRQ, GCID) select SYS_GUID() ID,
                                                                                         v_id SBJLID,
                                                                                            0 DQZT,
                                                                                      SYSDATE SBRQ,
                                                                                         c.id GCID
                                                                                           from T_BAS_GCJBXX c where c.id in (select a.id
                                                                                                                               from T_BAS_GCJBXX a
                                                                                                                               where a.scszbg = 1
                                                                                                                               minus
                                                                                                                               select b.gcid
                                                                                                                                from T_BAS_SZRBJCXX b
                                                                                                                                where TO_CHAR(b.bgrq, 'YYYY/MM/DD') =
                                                                                                                                TO_CHAR(SYSDATE, 'YYYY/MM/DD')
                                                                                                                                ) and c.xqbm=i.xqbm;
             END LOOP;
              end;
              declare
              begin
               v_date := TO_CHAR(SYSDATE,'DD');
              if(v_date='25') then
           insert into T_BGYCSBJL(ID,SSXQ,BGRQ,DQZT,SBSJ,DXFSZT,BGLX)
          select SYS_GUID() ID,
                 c.xqbm SSXQ,
                 SYSDATE BGRQ,
                 0 DQZT,
                 SYSDATE SBSJ,
                 0 DXFSZT,
                 1 BGLX
                 from T_BAS_GCJBXX c
                 where c.xqbm in (select a.xqbm
                                       from T_BAS_GCJBXX a
                                       where a.scszbg=1
                                       minus
                                   select b.sbdw
                                   from T_SZYBMBXX b
                                   where TO_CHAR(b.bgny,'YYYY/MM')=
                                   TO_CHAR(SYSDATE,'YYYY/MM')) group by c.xqbm;

end if;
               end;
             commit;

end Getyc;

begin
sys.dbms_scheduler.set_attribute(name => 'WFNCYS.JOB_YC', attribute => 'repeat_interval', value => 'Freq=DAILY;ByHour=17;ByMinute=30;BySecond=00');
end;

使用游标的存储过程:

create or replace procedure Getyc is
v_id VARCHAR2(36);
v_date VARCHAR2(4);
y_date VARCHAR2(4);
needd number;

/*定义查询结果集游标,注意游标存储的是结果集的快照*/
cursor gcjbxx_cur is
select c.xqbm from T_BAS_GCJBXX c

where c.id in(
select a.id from T_BAS_GCJBXX a
where a.scszbg = 1
minus
select b.gcid from T_BAS_SZRBJCXX b
where TO_CHAR(b.bgrq, 'YYYY/MM/DD')=TO_CHAR(SYSDATE, 'YYYY/MM/DD')) group by c.xqbm;
/*定义与游标类型匹配的行记录对象*/
gcjbxx_rec gcjbxx_cur%rowtype;

cursor jqtemp_cur is
select sjsj from t_bas_jqtemp;
jqtemp_rec jqtemp_cur%rowtype;

begin
select needduty into needd from workattendence
where TO_CHAR(datetime, 'YYYY/MM/DD')=TO_CHAR(SYSDATE, 'YYYY/MM/DD');
if(needd=1) then
/*打开游标*/
open gcjbxx_cur;
LOOP
fetch gcjbxx_cur into gcjbxx_rec;
/*当未找到记录时退出循环*/
exit when gcjbxx_cur%notfound;
v_id := SYS_GUID();
insert into T_BGYCSBJL (ID, SSXQ, BGRQ, DQZT, SBSJ, DXFSZT, BGLX)
VALUES(v_id,gcjbxx_rec.xqbm,SYSDATE,0,SYSDATE,0,0);
insert into T_RBYCSBMX(ID, SBJLID, DQZT, SBRQ, GCID)
select SYS_GUID() ID,v_id SBJLID,0 DQZT,SYSDATE SBRQ,c.id GCID from T_BAS_GCJBXX c
where c.id in (select a.id from T_BAS_GCJBXX a where a.scszbg = 1
minus
select b.gcid from T_BAS_SZRBJCXX b
where TO_CHAR(b.bgrq, 'YYYY/MM/DD') = TO_CHAR(SYSDATE, 'YYYY/MM/DD')) and c.xqbm=gcjbxx_rec.xqbm;
/*关闭游标*/
END LOOP;
close gcjbxx_cur;

v_date := TO_CHAR(SYSDATE,'DD');

if(v_date='25') then
insert into T_BGYCSBJL(ID,SSXQ,BGRQ,DQZT,SBSJ,DXFSZT,BGLX)
select SYS_GUID() ID,
c.xqbm SSXQ,
SYSDATE BGRQ,
0 DQZT,
SYSDATE SBSJ,
0 DXFSZT,
1 BGLX
from T_BAS_GCJBXX c
where c.xqbm in (
select a.xqbm from T_BAS_GCJBXX a where a.scszbg=1
minus
select b.sbdw from T_SZYBMBXX b
where TO_CHAR(b.bgny,'YYYY/MM')=TO_CHAR(SYSDATE,'YYYY/MM')) group by c.xqbm;
end if;

/*开始遍历t_bas_jqtemp*/
open jqtemp_cur;
loop
fetch jqtemp_cur into jqtemp_rec;

exit when jqtemp_cur%notfound;
for i in (
select c.xqbm from T_BAS_GCJBXX c
where c.id in (
select a.id from T_BAS_GCJBXX a where a.scszbg = 1
minus
select b.gcid from T_BAS_SZRBJCXX b
where TO_CHAR(b.bgrq, 'YYYY/MM/DD')=TO_CHAR(jqtemp_rec.sjsj, 'YYYY/MM/DD')) group by c.xqbm)
LOOP
v_id := SYS_GUID();
insert into T_BGYCSBJL (ID, SSXQ, BGRQ, DQZT, SBSJ, DXFSZT, BGLX)
VALUES(v_id,i.xqbm,jqtemp_rec.sjsj,0,jqtemp_rec.sjsj,0,0);
insert into T_RBYCSBMX(ID, SBJLID, DQZT, SBRQ, GCID)
select SYS_GUID() ID,v_id SBJLID,0 DQZT,jqtemp_rec.sjsj SBRQ,c.id GCID from T_BAS_GCJBXX c
where c.id in (select a.id from T_BAS_GCJBXX a where a.scszbg = 1
minus
select b.gcid from T_BAS_SZRBJCXX b
where TO_CHAR(b.bgrq, 'YYYY/MM/DD') = TO_CHAR(jqtemp_rec.sjsj, 'YYYY/MM/DD')) and c.xqbm=i.xqbm;
END LOOP;

y_date := TO_CHAR(jqtemp_rec.sjsj,'DD');
if(y_date='25') then
insert into T_BGYCSBJL(ID,SSXQ,BGRQ,DQZT,SBSJ,DXFSZT,BGLX)
select SYS_GUID() ID,
c.xqbm SSXQ,
jqtemp_rec.sjsj BGRQ,
0 DQZT,
jqtemp_rec.sjsj SBSJ,
0 DXFSZT,
1 BGLX
from T_BAS_GCJBXX c
where c.xqbm in (
select a.xqbm from T_BAS_GCJBXX a where a.scszbg=1
minus
select b.sbdw from T_SZYBMBXX b
where TO_CHAR(b.bgny,'YYYY/MM')=TO_CHAR(jqtemp_rec.sjsj,'YYYY/MM')) group by c.xqbm;
end if;
end loop;
close jqtemp_cur;

DELETE FROM t_bas_jqtemp;

else
insert into t_bas_jqtemp (sjsj,id) VALUES(SYSDATE,sys_guid());
end if;
commit;
end Getyc;

oracle 存储过程的写法的更多相关文章

  1. Oracle存储过程中跳出循环的写法

    注:本文来源于: <  Oracle存储过程中跳出循环的写法   > Oracle存储过程中跳出循环的写法 记录exit和return的用法 1:exit用来跳出循环 loop IF V_ ...

  2. Oracle存储过程(增、删、改)写法、oracle执行存储过程

    Oracle存储过程(增.删.改)写法 发布时间: 2010-3-24 11:07    作者: ZHF    来源: 51Testing软件测试网采编 字体:  小  中  大  | 上一篇 下一篇 ...

  3. Oracle的存储过程基本写法

    转: Oracle的存储过程基本写法 目录 1.1,Oracle存储过程简介: 1.2,创建存储过程的语法: 2.0,游标的使用.看到的一段解释很好的概念,如下: 回到顶部 1.1,Oracle存储过 ...

  4. oracle 存储过程 动态sql语句

    一.在oracle项目开发中越到问题: 在利用ODP向oracle中插入数据时,如果这样写:   insert into clobTable (id, story) values(1,'....'); ...

  5. Oracle 存储过程_(收集)

    oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字(    参数1 IN NUMBER,    参数2 IN NUMBER) IS变量 ...

  6. oracle 存储过程使用动态sql

    Oracle存储过程使用动态SQL 有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者. DDL和DML (注意DDL中可以用拼接字符串的方法用来create ta ...

  7. Oracle存储过程——日常记录

    代码规范 Oracle存储过程,关键字大写,变量小写并以v_开头,规范代码,提高可读性 赋值与判断符号 Oracle存储过程,变量赋值使用 := 符号,条件判断直接用 = 符号. 变量声明需在 beg ...

  8. 数据库周刊30丨数据安全法草案将亮相;2020数据库产业报告;云南电网上线达梦;达梦7误删Redo Log;Oracle存储过程性能瓶颈;易鲸捷实践案例……

    摘要:墨天轮数据库周刊第30期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.数据安全法草案即将亮相:将确立数据分级分类管理.应急处置制度[摘要]数据安全法草案即将在本 ...

  9. oracle 存储过程

    来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...

随机推荐

  1. Displaying Window In Center In Oracle Forms 6i

    Center window automatically  in Oracle Forms 6i, use the following procedure by passing window name ...

  2. Scrum Meeting 1-20151201

    任务安排 姓名 今日任务 明日任务 困难 董元财 学习下拉刷新的实现 完成下拉刷新的实现 手机的点击动作长按和下拉有类似的地方,比较难解决 胡亚坤 学习圆形头像代码设计 完成圆形头像代码设计 无 刘猛 ...

  3. fifter常见的运用场景

    没配置过滤器 package servlet; import java.io.IOException; import javax.servlet.ServletException; import ja ...

  4. 学习mongo系列(二) 新建数据库,collection ,insert(),save()

    一,新建数据库user:use user 二,查看当前使用的数据库:db 三,查看所有数据库:show dbs 四,删除当前正在使用的数据库:db.dropDatabase() 五,在当前数据库中插入 ...

  5. Grunt自动化构建工具(网址:http://www.gruntjs.net/getting-started或者http://gruntjs.cn/getting-started)

    简介:Grunt是基于Node.js的项目构建工具,对于需要重复执行的任务,例如压缩.编译.单元测试等,自动化工具可以减少你的工作量,使你的工作更轻松. 一:检测nodejs是否安装好,打开CMD控制 ...

  6. 【转】selenium之 定位以及切换frame

    转载自:http://www.voidcn.com/blog/huilan_same/article/p-6155896.html 很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明 ...

  7. 错误信息:System.Resources.MissingManifestResourceException: 未能找到任何适合于指定的区域或非特定区域性的资源。请确保在编译时已将“****.****.Resource.resources”正确嵌入或链接到程序集"****",或者确保所有需要的附属程序集都可加载并已进行了完全签名

    在网上搜索了N久都没看到几篇解决的文章,最后在不懈的努力下终于解决了,所以决定写下解决方法方便以后遇到同样问题的朋友: 其实这个错误的主要问题就是没有找到需要的资源文件(该文件为Resources.r ...

  8. 51nod 1163 最高的奖励(贪心+优先队列)

    题目链接:51nod 1163 最高的奖励 看着这题我立马就想到昨天也做了一道贪心加优先队列的题了奥. 按任务最晚结束时间从小到大排序,依次选择任务,如果该任务最晚结束时间比当前时间点晚,则将该任务的 ...

  9. sphinx索引文件进一步说明——最好是结合lucene一起看,直觉告诉我二者本质无异

    摘自:http://blog.csdn.net/cangyingzhijia/article/details/8592441 Sphinx使用的文件包括 "sph", " ...

  10. iOS开发UI篇—Quartz2D使用(信纸条纹)

    iOS开发UI篇—Quartz2D使用(信纸条纹) 一.前导程序 新建一个项目,在主控制器文件中实现以下几行代码,就能轻松的完成图片在视图中的平铺. #import "YYViewContr ...