`
chancelai
  • 浏览: 8006 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

自己第一次写的存储过程(动态批量插入)

阅读更多
create or replace procedure insert_duty_and_remark(datestr in varchar) is

--选择没有插入值班的用户
cursor cur is 
       select u.id from cmsuser u 
        where u.password is not null
        and u.cmsroleid=2
        and u.id not in (
            select distinct c.ccid 
            from duty c
            where 
            c.tdate = to_date(datestr,'yyyy-mm')
            )
        order by u.id;
--该月的备注的数目       
contentnum number;
--存储临时时间            
datetime date;
--存储该月的天使
mouthnum number;
--由于while
i number;
--临时存储sql语句
sqls varchar(500);
--由于时间过度
temvardate  varchar(200);

begin
i :=1;

--转换传过来的时间
select to_date(datestr,'YYYY-MM') into datetime from dual;
--求得该月份的天数
select to_number(to_char(last_day(to_date(datestr,'YYYY-MM')),'dd')) into mouthnum from dual;
--求该月的备注数目
select count(*) into contentnum from dutyremark u  where  to_char(u.datetime,'yyyy-mm') = datestr;

       --一:插入备注
  --判断该月的备注是否已存在
  if contentnum=0 then
        while i<= mouthnum loop
        begin
          temvardate := to_char(datetime,'YYYY-MM-dd'); 
          sqls := 'insert into dutyremark (datetime,content) values(to_date('||''''||temvardate||''''||','||''''||'YYYY-MM-DD'||''''||'), '||''''||' '||''''||')';
          dbms_output.put_line(sqls);
          dbms_output.put_line(datetime);
          dbms_output.put_line(i);
          execute immediate sqls;
          datetime := datetime+1;
          i:= i + 1;  
        end;
      end loop;
      dbms_output.put_line('--------备注插入结束--------');
      i:=1;
      datetime := datetime - mouthnum;
   end if;
 
  
       
       --二:插入值班状态
  --循环用户
  for cur_result in cur loop
      
    begin
      dbms_output.put_line('----------------');
      --循环给月的天数
      while i<= mouthnum loop

            begin 
            temvardate := to_char(datetime,'YYYY-MM-dd');
            sqls:='insert into duty(id,tdate,ccid,status) values (id.nextval,to_date('||''''||temvardate||''''||','||''''||'YYYY-MM-DD'||''''||'),'||to_char(cur_result.id)||',0)';
            dbms_output.put_line(sqls);
            dbms_output.put_line(datetime);
            dbms_output.put_line(i);
            execute immediate sqls;
            datetime := datetime+1;
            i:= i + 1;
            end;

      end loop;
      --再一次初始化参数
      i:=1;
      datetime := datetime - mouthnum;
    end;

  end loop; 
commit;
end insert_duty_and_remark;
分享到:
评论

相关推荐

    SQLLITE的批量插入。。。

    7. **考虑使用批量插入库**:有些第三方库如SQLite.swift(Swift)或ActiveAndroid(Java)提供了更高级别的批量插入API,简化了操作。 8. **优化存储引擎**:SQLite提供了多种存储引擎,如WAL(Write-Ahead ...

    sql下三种批量插入数据的方法

    本文将介绍三种批量插入数据的方法。第一种方法是使用循环语句逐个将数据项插入到数据库中;第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server 表;第三种使用的方法是sql server中的...

    C# 批量插入数据方式

    你可以创建一个包含多个INSERT语句的存储过程,然后调用这个过程一次性插入多条数据。 - **SqlBulkCopy**: 这是SQL Server提供的高效批量插入工具,它可以快速地将数据表或DataTable中的数据复制到另一个表。例如:...

    .Net中批量插入的几种实现方法

    最后,表值参数是另一种批量插入的方法,尤其在存储过程或函数中使用。表值参数允许你一次性传递多个参数值,就像一个临时表一样。这在.NET中可以通过定义结构类型并将其作为参数传递给数据库调用。虽然表值参数在...

    用SQL批量插入数据的存储过程

    ### SQL批量插入数据的存储过程知识点详解 #### 一、背景与目的 在数据库操作中,经常需要批量插入大量数据到表中。这种方式相比于单条插入具有更高的效率和更好的性能。尤其是在处理大数据集时,批量插入能够显著...

    CAD/CASS批量加载插入影像插件

    通过此插件,用户可以一次性导入多张图像,而不是逐个手动插入,节省了大量时间并减少了出错的可能性。 在实际应用中,用户可能还需要了解如何配置插件参数,如设置影像的显示比例、透明度、定位以及是否开启地理...

    DataTable批量插入数据到SQL Server 2005

    首先,创建DataTable对象并填充数据是批量插入的第一步。你可以通过DataTable的构造函数初始化一个空的DataTable,然后添加列,最后逐行填充数据。例如: ```csharp DataTable dataTable = new DataTable(...

    存储过程和触发器的应用

    2. **更快的执行速度**:由于存储过程在第一次执行时会被编译并优化,之后的每次调用都会直接使用已经编译好的执行计划,因此相比动态 SQL 语句的执行速度要快得多。 3. **减少网络流量**:通过将一系列 SQL 语句...

    Word 批量处理插入图片.zip

    批量插入图片是指在Word文档中一次性插入多个图片文件,而不是逐个手动操作。这可以极大地提高工作效率,尤其当文档中需要插入大量图片时。 2. **利用Word的自动更新功能**: Word具有自动更新功能,可以通过创建...

    MySQL死锁套路之唯一索引下批量插入顺序不一致

    对于批量插入,可以考虑一次性插入所有数据,或者分批插入并控制好批次的大小和顺序,以减小死锁的风险。同时,开发人员也可以通过设置超时时间,及时捕获并处理可能出现的死锁情况。 总的来说,理解MySQL中的死锁...

    存储过程和游标详解

    2. **打开游标**:执行查询,获取结果集的第一行。 3. **提取数据**:从当前行提取数据,通常配合循环结构使用。 4. **关闭游标**:释放资源,结束游标操作。 5. **释放游标**:彻底删除游标,释放所有相关资源。 #...

    第八单元 存储过程和触发器

    例如,当用户尝试插入新数据时,触发器可以检查数据是否符合业务规则,存储过程则可以处理更复杂的逻辑,如批量更新或计算衍生字段。 总结一下,存储过程和触发器是SQL Server数据库中的核心工具,它们提供了一种...

    Oracle批量插入数据的三种方式【推荐】

    在Oracle数据库中,批量插入数据是一项常见的操作,特别是在处理大量数据时,为了提高效率和减少网络传输,批量插入成为首选。以下将详细介绍标题中提到的三种Oracle批量插入数据的方法。 ### 第一种:PL/SQL块 这...

    Ocacle加速查询的存储过程

    集合写法(飞机速度)是通过一次性处理多个行来加速数据操作,如BULK COLLECT INTO和FORALL语句。这种技术将查询时间缩短到0.22秒,极大地提高了处理大量数据的速度。 5. **直接路径插入**: 直接路径插入避免了...

    sql 存储过程批量删除数据的语句

    它可以处理任意数量的ID,并且只需要调用一次存储过程即可完成批量删除,减少了网络通信和服务器资源的消耗。然而,使用时需谨慎,因为一旦执行,所有匹配的记录都会被永久删除,如果没有备份,可能会导致数据丢失。...

    MySQL批量添加数据脚本

    #### 方法一:使用存储过程实现批量插入 存储过程是SQL语句和可选控制流语句的预编译集合,存储在数据库中,可以通过指定的过程名来调用执行。这种方法可以提高代码的复用性和执行效率。 **存储过程创建语法:** `...

    基于ObjectARX的CAD图纸基础数据提取与图框批量自动插入方法.pdf

    4. 图框图幅的智能判断和批量插入:通过提取出的数据,可以智能判断图框的图幅大小,并在此基础上,自动化地插入对应的图框。这需要一种算法能够根据提取出的数据,智能地选择合适的图框尺寸并完成插入。 5. 数据...

    c# Dapper,添加,修改,删除,查询,事务,存储过程,含数据库

    - `BulkInsert`: Dapper扩展方法,用于批量插入数据,提高了数据插入的效率。 2. **Dapper的修改方法**: - `Update`: 更新数据时,通常会根据主键或其他唯一标识来定位需要更新的记录。 - `UpdateAsync`: 异步...

    关于sql server批量插入和更新的两种解决方案

    如果仅进行简单的单表批量插入操作,使用这种方法可能过于复杂,可以直接使用INSERT语句配合BULK INSERT或者INSERT...SELECT等语法进行一次性插入。 总的来说,对于SQL Server的批量插入和更新,应尽量避免游标,...

Global site tag (gtag.js) - Google Analytics