2017-08-13 4 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

のいずれかを使用する、TIMESTAMPと一緒に使用される:= 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

変数をリテラルにバインドすることはできません。 INTERVALはちょうど `time_avail使用

time_avail := sysdate - days_trans; 

又は

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

簡単な算術手法は、OPの要件に適しています – APC