ARG_VAL() returns NULL if no argument
If the index passed to the function references an argument that does not exist, the
ARG_VAL()
function must be handled differently between I4GL and Genero
BDL.
With IBM®
Informix® 4GL (I4GL), if the index passed to the function
references an argument that does not exist, the
ARG_VAL()
function returns a blank
character. With Genero BDL, if the index passed to the function references an argument that does not
exist, the ARG_VAL()
function returns
NULL
:$ cat arg_val.4gl
MAIN
DEFINE v VARCHAR(10)
LET v = ARG_VAL(1)
IF v IS NULL THEN
DISPLAY "IS NULL"
ELSE
DISPLAY "IS NOT NULL: [", v, "]"
END IF
END MAIN
$ fglcomp arg_val.4gl && fglrun arg_val.42m
IS NULL
$ c4gl -o arg_val.bin arg_val.4gl && ./arg_val.bin
IS NOT NULL: [ ]
You must review
ARG_VAL()
conditions using the !=
operator, and
add NVL()
to handle NULL
arguments:-- Default is "USER" mode when no argument is passed or when argument
-- is different from "ADMIN"
MAIN
--IF ARG_VAL(1)!="ADMIN" THEN
IF NVL(ARG_VAL(1),"?")!="ADMIN" THEN
DISPLAY "User mode..."
ELSE
DISPLAY "Admin mode..."
END IF
END MAIN
Normally the code should use the NUM_ARGS()
, to check the number of parameters
passed to the program.