只需要大概的结构就行了,,字段太多不好提供啊
比如表a中 有两个时间字段b,c,每天扫描表a中时间段在a~b但已经过期了的(意思就是b中的时间如2014.4.2 已经是过期了的),
把这些字段找出来,怎么写呢
oracle如果想写一个存储过程每天定时扫描一张表中的数据,该怎么写呢
答案:2 悬赏:40 手机版
解决时间 2021-02-24 17:03
- 提问者网友:做自己de王妃
- 2021-02-23 22:30
最佳答案
- 五星知识达人网友:迟山
- 2021-02-23 22:35
PROCEDURE validate_date(p_date IN VARCHAR2,
p_list_cursor OUT sys_refcursor) IS
l_date VARCHAr2(40) := NULL;
l_err VARCHAr2(250) := NULL;
l_select VARCHAr2(4000) := NULL;
p_status VARCHAr2(40) := NULL;
BEGIN
IF NVL(p_date, 'X') = 'X' THEN --#如果时间是空,默认当前时间'YYYY-MM-DD HH24:MI:SS'
l_date := to_char(SYSDATE(),'YYYY-MM-DD HH24:MI:SS'); ---ROUTE DOES NOT EXISTS
ELSE
l_date:=p_date;
END IF;
--#查找b小于这个时间的数据
l_select := 'SELECT * FROM A WHERe B <' || CHR(39) ||
l_date || CHR(39);
--#将接个返回。系统调用时接收(LIST)
OPEN p_list_cursor FOR l_select;
--#如果有错误,将错误插入到日志表
EXCEPTION
WHEN OTHERS THEN
l_err := SUBSTr(SQLERRM, 1, 100);
p_status := 'E';
INSERT INTO errlog
VALUES
('validate_date',
l_err,
CURRENT_DATE);
commit;
END;
p_list_cursor OUT sys_refcursor) IS
l_date VARCHAr2(40) := NULL;
l_err VARCHAr2(250) := NULL;
l_select VARCHAr2(4000) := NULL;
p_status VARCHAr2(40) := NULL;
BEGIN
IF NVL(p_date, 'X') = 'X' THEN --#如果时间是空,默认当前时间'YYYY-MM-DD HH24:MI:SS'
l_date := to_char(SYSDATE(),'YYYY-MM-DD HH24:MI:SS'); ---ROUTE DOES NOT EXISTS
ELSE
l_date:=p_date;
END IF;
--#查找b小于这个时间的数据
l_select := 'SELECT * FROM A WHERe B <' || CHR(39) ||
l_date || CHR(39);
--#将接个返回。系统调用时接收(LIST)
OPEN p_list_cursor FOR l_select;
--#如果有错误,将错误插入到日志表
EXCEPTION
WHEN OTHERS THEN
l_err := SUBSTr(SQLERRM, 1, 100);
p_status := 'E';
INSERT INTO errlog
VALUES
('validate_date',
l_err,
CURRENT_DATE);
commit;
END;
全部回答
- 1楼网友:北城痞子
- 2021-02-23 23:40
400多万,200秒不算慢的,你可以把索引全部删掉能快一点,但是没必要
等你工作了碰到一条语句更新几个小时的你就习惯了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯