今天由于测试一个报表,必须要当天的数据,可我昨天刚测过,数据还在库里,于是想偷个懒,手工修改时间字段为今天的日期,改了不到1分钟,发现表太多了,而且记录时间的字段每个表还不止一个,不如用程序来做。于是写了下面的这个存储过程,哈哈,好用 无 /*
今天由于测试一个报表,必须要当天的数据,可我昨天刚测过,数据还在库里,于是想偷个懒,手工修改时间字段为今天的日期,改了不到1分钟,发现表太多了,而且记录时间的字段每个表还不止一个,不如用程序来做。于是写了下面的这个存储过程,哈哈,好用 /* *搜索数据库当前用户的所有表,查出所有含date和time名称, *并且是number(14)类型的字段的日期部分改为当前日期 */declare type tcur is ref cursor; --定义游标类型 columnscur tcur; --定义表的字段游标 stname varchar(30);--存储表名 scname varchar(30);--存储字段名 ncurrenttime number(14); --存储当前日期 updstr varchar(900);begin --获取当前日期yyyymmdd select to_number(to_char(sysdate, 'yyyymmdd') || '000000') into ncurrenttime from dual; --从oracle系统表获取包含数字日期形式的字段名和对应的表名 open columnscur for select p.table_name, p.column_name from user_tab_columns p where p.table_name in ('openorder', 'orderinstruction', 'instructiondetail', 'intelligentorder', 'tradingresult') and p.data_type = 'number' and p.data_precision=14 and (p.column_name like '%date%' or p.column_name like '%time%'); --根据获得的表名和字段名把目前的时间更新为当前日期,时间保持不变 loop fetch columnscur into stname, scname; exit when columnscur%notfound; begin --执行更新 updstr := 'update ' || stname || ' set ' || scname || '=' || ncurrenttime || '+ to_number(nvl(substr(' || scname || ', 9), 0)) where ' || scname || ' is not null and ' || scname || '>0'; --debug --dbms_output.put_line(updstr); execute immediate updstr; exception --如果发生错误,打印出执行的sql when others then dbms_output.put_line('error:' || updstr); end; end loop; commit;end;