Language basics / Type conversions |
By default, in case of type conversion error or overflow errors, the program continues, the target variable is set to NULL and the global STATUS variable is not set.
In order to detect data conversion and overflow errors, use the WHENEVER ANY ERROR statement.
The next code example:
MAIN -- DBDATE set to Y4MD- DEFINE v VARCHAR(50), d DATE LET v = "2012-99-99" -- invalid date string LET d = v DISPLAY status, "/", NVL(d,"NULL") -- displays 0/NULL WHENEVER ANY ERROR CONTINUE LET d = v DISPLAY status, "/", NVL(d,"NULL") -- displays -1205/NULL WHENEVER ANY ERROR STOP LET d = "2012-11-23" -- valid date, ok DISPLAY status, "/", NVL(d,"NULL") -- displays 0/2012-11-23 LET d = v -- program execution stopped with error -1205 END MAIN
0/NULL -1218/NULL Program stopped at 'x.4gl', line number 10. FORMS statement error number -1218. String to date conversion error.
Conversion and overflow errors are implicitly trapped in TRY/CATCH blocks.
In the next example, the INTERVAL variable is not large enough to hold the result of d2 - d1:
MAIN DEFINE d1, d2 DATETIME YEAR TO FRACTION(5) DEFINE i INTERVAL SECOND(2) TO SECOND LET d1 = "2015-11-06 17:40:21.436" LET d2 = "2015-11-06 10:40:21.436" TRY LET i = d2 - d1 CATCH DISPLAY STATUS, " / ", err_get(STATUS) END TRY END MAIN
-1265 / Overflow occurred on a datetime or interval operation.