在程序中传递参数,有ry_id,riqi两个字段,从基础表中选择出符合在一个时间段内有此人员编号的所有记录,并插入到另外一个新表中(表已存在)并保存!先谢谢了!

解决方案 »

  1.   

    create or replace procedure aaa(a varchar2,b varchar2)as
    v_sql varchar2(2000);
    begin
      v_sql:='';--拼装sql
      execute immediate v_sql;
    end;
      

  2.   

    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;
      

  3.   

    报错了!
    这一行 INSERT INTO 新表 (字段1,字段2......) 
      

  4.   

    1by1() 的思路没有问题啊。
    不过在Insert之前,要先执行delete from 新表 where RY_ID = RYID AND 时间段 = RIQI防止主键冲突。
      

  5.   

    将时间段作为存储过程的参数,使用MERGE INTO完成更新。create or replace procedure aaa(ry_id varchar2, --存储人员ID的字段名
                                    riqi varchar2,  --存储日期的字段名
                                    date1 varchar2, --开始日期
                                    date2 varchar2  --结束日期 ) as
    .....如果ry_id,riqi固定,就没有必要作为参数了。
      

  6.   

    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;
      

  7.   

    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;
      

  8.   

    用guomg(力友)的方法就应该行了!
      

  9.   

    insert into a select * from b where col_name between ... and ...;