2017-08-13 101 views
0

我正在创建一个触发器,用于在过去执行插入日期。使用变量oracle触发器从sysdate中减去天数

days_trans := dbms_random.value(14,90); 
time_avail := sysdate - interval ':days_trans' day; 

这给了我

PLS-00166: bad format for date, time, timestamp or interval literal

我应该如何减去可变恒定?

+0

只需使用'time_avail:= SYSDATE - days_trans;'。字符串':days_trans'在间隔文字中是不允许的,正确的语法请参见[here](https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements003.htm#i38598)。顺便说一句,dbms_random.vaue给出浮点值,而不是整数,它可能会更好地截断或舍入该数字,因为你可以得到惊人的结果。 – krokodilko

+0

谢谢。 trunc函数也相当有用。 –

回答

1

您不能将变量绑定到文字。 INTERVALTIMESTAMP使用,使用

time_avail := sysdate - days_trans; 

time_avail := systimestamp - days_trans * interval '1' day; 
+0

简单的算术方法更适合OP的要求 – APC