2 qq 24072779 qq_24072779 于 2016.09.09 17:18 提问

ORACLE存储过程日期循环插入不知道错误的地方在哪。求解

create or replace procedure test_date

is
v_start date;
v_end date;
v_endday date;
v1 date;--日期
v2 date;--年月
v3 date;--月份
v4 date;--季度
v5 date;--一年中的第几周
v6 date;--星期几
v7 date;--是否周六周日
v8 date;--日期的上个月
v9 date;--本月最后一天
i number;
k number;
begin
v_start:=to_date('20160401','yyyymmdd');
v_end:=to_date('20160601','yyyymmdd');
k:=v_end-v_start;
for i in 0..k loop
v1:=v_start date+to_date(i);
v2:=to_char(v1,'yyyy-mm') ;
v3:=to_char(v1,'mm');
v4:=to_char(v1,'q');
v5:=to_char(v1,'ww');
v6:=to_char(v1,'dy');
v7:=decode(v1-1,1,0,2,0,3,0,4,0,5,0,6,1,7,1);
v8:=to_char(add_months(v6,-1),'yyyy-mm');
v9:=last_day(v1);
insert into test_date1 values(v1,v2,v3,v4,v5,v6,v7,v8,v9);
end loop
end test_date;


需要实现的功能建一个这样的表
create table test_date
(

v1 varchar2(40),
v2 varchar2(40),
v3 varchar2(40),
v4 varchar2(40),
v5 varchar2(40),
v6 varchar2(40),
v7 varchar2(40),
v8 varchar2(40),
v9 varchar2(40)
);

要求写一个存储过程
往这个测试表中插入数据
从2007年1月1日到2008年1月17日
循环插入

V1 V2 V3 V4(季度) V5(一年中的第几周) V6(星期几) V7(是否周六日) V8(上一月) V9(本月最后一天)
2007年01月01日 200701 01 1 1 1 0 200612 20070131
2007年01月02日 200701 01 1 1 2 0 200612 20070131
2007年01月03日 200701 01 1 1 3 0 200612 20070131
2007年01月04日 200701 01 1 1 4 0 200612 20070131
2007年01月05日 200701 01 1 1 5 0 200612 20070131
2007年01月06日 200701 01 1 1 6 1 200612 20070131
2007年01月07日 200701 01 1 1 7 1 200612 20070131
2007年01月08日 200701 01 1 2 1 0 200612 20070131

1个回答

lzp_lrp
lzp_lrp   Ds   Rxr 2016.09.09 17:25

for i in 0..k loop
v1:=v_start date+to_date(i);

问题出在这时顾,i为数值,你不用直接用to_date(i),这是不对的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
oracle-存储过程-日期加1循环
CREATE OR REPLACE     PROCEDURE QJHF (qjIdStr IN VARCHAR2) AS ksrq DATE;--请假开始日期 jsrq DATE;--请假结束日期 ryId VARCHAR2(36); prevDate VARCHAR2(10);--请假日期字符串形式 isHoliday number;  -- 是否节假日 holidayType
oracle存储过程中传入日期参数,插入到表
create or replace procedure add_zd(soid in number,sdate in date,ye in number, monthsr in number,monthzc in number) as  begin  dbms_output.put_line(sdate);  insert into allso( soid,sodate,ye,s,
Oracle 利用储存过程插入循环插入大量数据方法
当我们进行测试数据或者进行某种大数据量的时候,可以用一下语句进行大批量插入, 通过我的测试,10万条数据插入时间为7秒左右,100万条记录插入时间为65秒,200万插入为150秒。 我机器配置为 CPU I5 2450M 内存4G 硬盘 西部数据500G 5400转 操作系统为WIN7 64位 ,数据库为ORACLE 11G 64位 插入测试工具为PL\SQL 9.0 declare
oracle 存储过程循环插入10000条记录---存储过程
<br />create or replace procedure msw_add is<br /> begin<br />   for i in 1 ..100000 loop<br />     insert into t1(id,name) values(i, sysdate);<br />     end loop;<br /> end msw_add;<br /> /
oracle存储过程中的while loop循环示例
declare   load_date date; --声明一个循环变量 begin   load_date := to_date('201001', 'yyyymm'); --给循环变量赋初始值   while load_date         to_date(to_char(add_months(sysdate, -1), 'yyyymm'), 'yyyy
oracle 采用游标循环插入数据的存储过程
--用case when else判断是否插入随机生成的考勤记录 create or replace procedure mytest_RestoreKq as kssj date; jssj date; tmpsj date; amnum int; pmnum int; cursor cs is SELECT sfz,zwbh FROM ncldlpx where xxid='00
oracle数据库存储过程范例(使用游标进行循环)
使用游标进行循环。 create or replace PROCEDURE Counting AS a_count number; cursor authorListCursor is select ID from SCOPUS_AUTHOR ; BEGIN delete from A_TEMP; for curAuthor in authorListCursor loop be
oracle 存储过程 传入时间
自己用到的 主要就是通过这个存储过程创建一个带有参数视图 /* Formatted on 2013-7-18 14:33:03 (QP5 v5.185.11230.41888) */ CREATE OR REPLACE PROCEDURE omp_produce_allinfo (starttime IN DATE,
利用oracle存储过程向数据库批量插入数据
create or replace procedure test is begin for i in 1 ..100 loop insert into 表名(id,name) values(i, sysdate); end loop; end test; BEGIN test(); END; drop procedure test
Oracle 存储过程批量插入数据
oracle 存储过程批量插入大量数据 declare numCount number; userName varchar2(512); email varchar2(512); markComment varchar2(512); maxId number; begin numCount := 1; userName := 'userName number :