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;
分享到:
相关推荐
7. **考虑使用批量插入库**:有些第三方库如SQLite.swift(Swift)或ActiveAndroid(Java)提供了更高级别的批量插入API,简化了操作。 8. **优化存储引擎**:SQLite提供了多种存储引擎,如WAL(Write-Ahead ...
本文将介绍三种批量插入数据的方法。第一种方法是使用循环语句逐个将数据项插入到数据库中;第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server 表;第三种使用的方法是sql server中的...
你可以创建一个包含多个INSERT语句的存储过程,然后调用这个过程一次性插入多条数据。 - **SqlBulkCopy**: 这是SQL Server提供的高效批量插入工具,它可以快速地将数据表或DataTable中的数据复制到另一个表。例如:...
最后,表值参数是另一种批量插入的方法,尤其在存储过程或函数中使用。表值参数允许你一次性传递多个参数值,就像一个临时表一样。这在.NET中可以通过定义结构类型并将其作为参数传递给数据库调用。虽然表值参数在...
### SQL批量插入数据的存储过程知识点详解 #### 一、背景与目的 在数据库操作中,经常需要批量插入大量数据到表中。这种方式相比于单条插入具有更高的效率和更好的性能。尤其是在处理大数据集时,批量插入能够显著...
通过此插件,用户可以一次性导入多张图像,而不是逐个手动插入,节省了大量时间并减少了出错的可能性。 在实际应用中,用户可能还需要了解如何配置插件参数,如设置影像的显示比例、透明度、定位以及是否开启地理...
首先,创建DataTable对象并填充数据是批量插入的第一步。你可以通过DataTable的构造函数初始化一个空的DataTable,然后添加列,最后逐行填充数据。例如: ```csharp DataTable dataTable = new DataTable(...
2. **更快的执行速度**:由于存储过程在第一次执行时会被编译并优化,之后的每次调用都会直接使用已经编译好的执行计划,因此相比动态 SQL 语句的执行速度要快得多。 3. **减少网络流量**:通过将一系列 SQL 语句...
批量插入图片是指在Word文档中一次性插入多个图片文件,而不是逐个手动操作。这可以极大地提高工作效率,尤其当文档中需要插入大量图片时。 2. **利用Word的自动更新功能**: Word具有自动更新功能,可以通过创建...
对于批量插入,可以考虑一次性插入所有数据,或者分批插入并控制好批次的大小和顺序,以减小死锁的风险。同时,开发人员也可以通过设置超时时间,及时捕获并处理可能出现的死锁情况。 总的来说,理解MySQL中的死锁...
2. **打开游标**:执行查询,获取结果集的第一行。 3. **提取数据**:从当前行提取数据,通常配合循环结构使用。 4. **关闭游标**:释放资源,结束游标操作。 5. **释放游标**:彻底删除游标,释放所有相关资源。 #...
例如,当用户尝试插入新数据时,触发器可以检查数据是否符合业务规则,存储过程则可以处理更复杂的逻辑,如批量更新或计算衍生字段。 总结一下,存储过程和触发器是SQL Server数据库中的核心工具,它们提供了一种...
在Oracle数据库中,批量插入数据是一项常见的操作,特别是在处理大量数据时,为了提高效率和减少网络传输,批量插入成为首选。以下将详细介绍标题中提到的三种Oracle批量插入数据的方法。 ### 第一种:PL/SQL块 这...
集合写法(飞机速度)是通过一次性处理多个行来加速数据操作,如BULK COLLECT INTO和FORALL语句。这种技术将查询时间缩短到0.22秒,极大地提高了处理大量数据的速度。 5. **直接路径插入**: 直接路径插入避免了...
它可以处理任意数量的ID,并且只需要调用一次存储过程即可完成批量删除,减少了网络通信和服务器资源的消耗。然而,使用时需谨慎,因为一旦执行,所有匹配的记录都会被永久删除,如果没有备份,可能会导致数据丢失。...
#### 方法一:使用存储过程实现批量插入 存储过程是SQL语句和可选控制流语句的预编译集合,存储在数据库中,可以通过指定的过程名来调用执行。这种方法可以提高代码的复用性和执行效率。 **存储过程创建语法:** `...
首先,批量添加数据是指一次向数据库中插入多条记录,而批量修改则是在已有的数据基础上进行更新。在tp5框架中,`saveAll()`方法是这两个操作的核心工具。这个方法允许我们传入一个包含多个数据对象(或数组)的集合...
4. 图框图幅的智能判断和批量插入:通过提取出的数据,可以智能判断图框的图幅大小,并在此基础上,自动化地插入对应的图框。这需要一种算法能够根据提取出的数据,智能地选择合适的图框尺寸并完成插入。 5. 数据...
如果仅进行简单的单表批量插入操作,使用这种方法可能过于复杂,可以直接使用INSERT语句配合BULK INSERT或者INSERT...SELECT等语法进行一次性插入。 总的来说,对于SQL Server的批量插入和更新,应尽量避免游标,...