create or replace procedure aaa(a varchar2,b varchar2)as v_sql varchar2(2000); begin v_sql:='';--拼装sql execute immediate v_sql; end;
create or replace procedure aaa(RYID varchar2,RIQI varchar2) as BEGIN INSERT INTO 新表 (字段1,字段2......) SELECT (字段1,字段2......) FROM 基础表 WHERE RY_ID = RYID AND 时间段 = RIQI END;
报错了! 这一行 INSERT INTO 新表 (字段1,字段2......)
1by1() 的思路没有问题啊。 不过在Insert之前,要先执行delete from 新表 where RY_ID = RYID AND 时间段 = RIQI防止主键冲突。
将时间段作为存储过程的参数,使用MERGE INTO完成更新。create or replace procedure aaa(ry_id varchar2, --存储人员ID的字段名 riqi varchar2, --存储日期的字段名 date1 varchar2, --开始日期 date2 varchar2 --结束日期 ) as .....如果ry_id,riqi固定,就没有必要作为参数了。
create or replace procedure aaa(ID in varchar2,rq1 in varchar2,rq2 in varchar2) as BEGIN delete 新表 WHERE RY_ID = id AND ( 时间段 > rq1 and 时间段 > rq2 ); INSERT INTO 新表 (字段1,字段2......) SELECT (字段1,字段2......) FROM 基础表 WHERE RY_ID = id AND ( 时间段 > rq1 and 时间段 > rq2 ); END;
help you!!!create or replace procedure aaa(ID in varchar2,rq1 in varchar2,rq2 in varchar2) as BEGIN delete 新表 WHERE RY_ID = id AND ( 时间段 > rq1 and 时间段 > rq2 ); INSERT INTO 新表 (字段1,字段2......)AVALUES --语法补充 SELECT (字段1,字段2......) FROM 基础表 WHERE RY_ID = id AND ( 时间段 > rq1 and 时间段 > rq2 ); END;
用guomg(力友)的方法就应该行了!
insert into a select * from b where col_name between ... and ...;
v_sql varchar2(2000);
begin
v_sql:='';--拼装sql
execute immediate v_sql;
end;
BEGIN
INSERT INTO 新表 (字段1,字段2......)
SELECT (字段1,字段2......) FROM 基础表
WHERE RY_ID = RYID AND 时间段 = RIQI
END;
这一行 INSERT INTO 新表 (字段1,字段2......)
不过在Insert之前,要先执行delete from 新表 where RY_ID = RYID AND 时间段 = RIQI防止主键冲突。
riqi varchar2, --存储日期的字段名
date1 varchar2, --开始日期
date2 varchar2 --结束日期 ) as
.....如果ry_id,riqi固定,就没有必要作为参数了。
BEGIN
delete 新表 WHERE RY_ID = id AND ( 时间段 > rq1 and 时间段 > rq2 ); INSERT INTO 新表 (字段1,字段2......)
SELECT (字段1,字段2......) FROM 基础表
WHERE RY_ID = id AND ( 时间段 > rq1 and 时间段 > rq2 );
END;
BEGIN
delete 新表 WHERE RY_ID = id AND ( 时间段 > rq1 and 时间段 > rq2 ); INSERT INTO 新表 (字段1,字段2......)AVALUES --语法补充
SELECT (字段1,字段2......) FROM 基础表
WHERE RY_ID = id AND ( 时间段 > rq1 and 时间段 > rq2 );
END;