2017-08-13 6 views
0

Je crée un déclencheur pour insérer une insertion avec une date dans le passé.Soustrayez le nombre de jours de sysdate à l'aide du déclencheur variable oracle

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

Cela me donne

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

Comment dois-je soustraire la constante variable?

+0

Il suffit d'utiliser 'time_avail: = SYSDATE - days_trans;'. Une chaîne ': days_trans' n'est pas autorisée dans les littéraux d'intervalle, pour une syntaxe correcte, veuillez consulter [ici] (https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements003.htm#i38598). BTW, dbms_random.vaue donne une valeur à virgule flottante, pas entier, il peut être préférable de trunc ou arrondir ce nombre, car vous pouvez obtenir des résultats surprenants. – krokodilko

+0

Merci. La fonction trunc a été très utile aussi. –

Répondre

1

Vous ne pouvez pas lier des variables à des littéraux. INTERVAL sont utilisés avec TIMESTAMP, utilisez

time_avail := sysdate - days_trans; 

ou

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

L'approche arithmétique simple est le meilleur ajustement pour l'exigence du PO – APC