I have a simple query that worked previously, but after upgrading from 7.9.8 to 7.9.11 I am getting an Oracle error ORA-01830. Here is the query in question:
SELECT "t_stamp", "assm_parts" FROM DBH where "t_stamp" BETWEEN TO_DATE('{Root Container.Date Range.startDate}', 'YYYY-MM-DD HH24:MI:SS') AND TO_DATE('{Root Container.Date Range.endDate}', 'YYYY-MM-DD HH24:MI:SS')
Oracle date syntax is a pain, but I didn’t think updating Ignition would have any effect. And it worked previously. Here it the full error:
SQLQuery(query=SELECT "t_stamp", "assm_parts"
FROM DBH
where "t_stamp" BETWEEN
TO_DATE('2019-06-08 02:00:00.000', 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE('2019-06-09 02:00:00.000', 'YYYY-MM-DD HH24:MI:SS'), database=ignition_scada_test)@0ms
On: metrics.Root Container.Chart.Data
caused by GatewayException: ORA-01830: date format picture ends before converting entire input string
caused by SQLDataException: ORA-01830: date format picture ends before converting entire input string
Oh it looks like perhaps going from 7.9.8 added millisecond precision to my startDate and endDate properties. Does anyone know a good way to change the precision on the startDate and endDate from the Date Range object?
You could create a hidden label or text box controls and bind them to an expression of
dateFormat({Root Container.Date Range.startDate},'yyyy-MM-dd HH:mm:ss')
Then pass those values to your query?
I don’t deal with Oracle dates so I am not sure if that will work or not.
yeah I am trying that, for whatever reason java is passing a fractional second and I can’t get the syntax right on the Oracle side to accept the fractional second
Ok I finally got it to work. In case anyone running Oracle DB runs in to this, you must convert TO_TIMESTAMP in your query and not TO_DATE, because TO_DATE does not support fractional seconds.
Working query (I have gone back to just calling the date range property, not a custom property):
SELECT "t_stamp", "assm_parts" FROM DBH where "t_stamp" BETWEEN TO_TIMESTAMP('{Root Container.Date Range.startDate}','YYYY-MM-DD HH24:MI:SS.FF3') AND TO_TIMESTAMP('{Root Container.endDate}','YYYY-MM-DD HH24:MI:SS.FF3')
Can anyone confirm that between 7.9.8 and 7.9.11 the precision changed on the Java side?
1 Like
You should convert to named queries and let JDBC handle these conversions (via named parameters) for you. Milliseconds on Date() objects is handled appropriately in pretty much all cases.
2 Likes
Thank you for this. We had the exact situation and to_timestamp helped!