如何在Oracle中与用户系统日期相比,用户触发更新列?

时间:2015-11-02 03:27:14

标签: sql oracle triggers

我写了这个触发器来更新某个列。我写的触发器是:

CREATE TRIGGER updateotMark
BEFORE UPDATE
ON sBookBorrow
FOR EACH ROW
WHEN(SYSDATE-to_date(etime)>15)
BEGIN
UPDATE otMark = 1;
END;
/

这是我第一次使用触发器,所以我不知道出了什么问题。有任何想法吗?谢谢大家的回答。

更新:这是我在控制台中获得的内容。我做错了什么? enter image description here

UPDATE2 :现在它有一条错误消息:第5行的错误: ORA-04076:无效的新旧规范

2 个答案:

答案 0 :(得分:0)

只需更新:新值

CREATE TRIGGER updateotMark
BEFORE UPDATE
ON sBookBorrow
FOR EACH ROW
WHEN(SYSDATE-to_date(etime)>15)
BEGIN
:new.otmark = 1;
END;

答案 1 :(得分:0)

" etime"?

的数据类型是什么?

如果是日期,您不需要使用" TO_DATE"功能。例如(SYSDATE - etime> 15)

如果是VARCHAR2,则需要输入格式。恩。 TO_DATE(etime,' YYYYMMDD')

但是,在SQLPlus中使用SHOW将为您提供有关错误的更多信息。

var clips = document.getElementsByClassName('clip');
var circles = document.getElementsByClassName('circle');
var numClips = clips.length;
var timelines = [];

for (var i = 0; i < numClips; i += 1) {
  createTimeline(i);
  assignListeners(i);
}

function createTimeline(i) {
  var timeline = new TimelineMax({ paused: true });
  timeline.to(circles[i], 0.6, { opacity: 0, ease: Expo.easeInOut }, 0);
  timeline.to(clips[i], 0.6, {
    attr: { r: 120 },
    transformOrigin: '50% 50%',
    ease: Expo.easeInOut
  }, 0.1);
  timelines[i] = timeline;
}

function assignListeners(i) {
  (function(i) {
    circles[i].addEventListener('mouseenter', function(e) { expand(e, i); }, false);
    circles[i].addEventListener('mouseleave', function(e) { contract(e, i); }, false);
  }(i));
}

function expand(e, i) { timelines[i].play(); }
function contract(e, i) { timelines[i].reverse(); }

试试这个。

SHOW ERROR TRIGGER updateotMark;