Variable initializers
Variables can be initialized in their definition.
Syntax
variable-definition = initializer{ scalar-initializer
| record-initializer
| array-initializer
| dictionary-initializer
}{ integer-literal
| numeric-literal
| text-literal
| mdy-date-literal
| datetime-literal
| interval-literal
| boolean-literal
| NULL
}( identifier : initializer [,...] ) [ initializer [,...] ]( key : initializer [,...] )- variable-definition is a 
DEFINEorVARinstruction. - integer-literal is an whole number literal.
 - numeric-literal is a decimal number literal.
 - text-literal is a character string literal, including localized strings.
 - mdy-date-literal is an 
MDY(mm,dd,yyyy)specification. - datetime-literal is a datetime literal.
 - interval-literal is an interval literal.
 - key identifies a dictionary entry. It must be a string literal, and cannot be a localized string.
 
Variable initializer basics
DEFINE instruction, add an equal sign followed
by an initializer literal:DEFINE v INTEGER = -800A variable initializer can not use expressions such as a value returned by a function, it must always be a static literal.
MAIN
    DEFINE v INT = "abc"
| incompatible types, found: 'CHAR', required: 'INTEGER'.
| See error number -6631.
END MAINLocal function variables of the first function in a module will be initialized before any
WHENEVER statement.
See the DEFINE syntax topic for a complete description of the variable initializer syntax.
Initializing DATE variables
MDY()
literal:DEFINE d DATE = MDY(12,24,2018)Initializing RECORD variables
DEFINE r1 RECORD
        f1 INTEGER,
        f2 STRING 
    END RECORD = (f1: 99, f2: "abc")An invalid record initialization value can produce compilation errors such as -8421, -8424, or -8425.
TYPE Type1 RECORD
        f1 INTEGER,
        f2 STRING 
    END RECORD
DEFINE r2 Type1 = (f1: 99, f2: "abc")DEFINE r1 Type1 = (f2: "abc")            -- f1 omitted
DEFINE r2 Type1 = (f2: "abc", f1: 99)    -- f2 before f1When a record member is omitted in the initializer, it will get the default value according to its type, as described in Variable default values.
LIKE
clause:SCHEMA stores
DEFINE customer RECORD LIKE customer.* = (fname: 'Peter', lname: 'Mango')DEFINE r1 RECORD
          f1 INTEGER,
          f2 RECORD
             f21 STRING,
             f22 STRING
          END RECORD
    END RECORD = ( f1: 99,
                   f2: (f21:"abc", f22:"def") )Initializing DYNAMIC ARRAY variables
DEFINE arr DYNAMIC ARRAY OF INT = [ 1, 2, 3, 5, 8, 13 ]An invalid array initialization value can produce compilation errors such as -8422.
DEFINE pls DYNAMIC ARRAY OF RECORD
                id INTEGER,
                name VARCHAR(50)
           END RECORD =
         [
           ( id: 501, name: "Baxter" ),
           ( id: 502, name: "Folkap" ),
           ( id: 503, name: "Kirtshof" )
         ]Initializing DICTIONARY variables
DICTIONARY variables can be initialized by using a comma-separated list of
elements included in parentheses. Each element must be a key/value pair separated by a
colon:DEFINE mcs DICTIONARY OF DECIMAL(10,5) =
         ( "Pi"      : 3.14159,
           "Euler"   : 2.71828,
           "Golden"  : 1.61803
         )Structured dictionaries can be initialized by combining the initializer syntax for dictionaries and records:
DEFINE pls DICTIONARY OF RECORD
                name VARCHAR(50),
                address VARCHAR(200)
           END RECORD =
         (
           "CB841" : ( name: "Baxter", address : "4 Baker Street" ),
           "CB112" : ( name: "Folkap", address : "234 Sunset Road" ),
           "CB233" : ( name: "Kirtshof", address : "76 Colmor Row" )
         )