Code SQL built-in and scalar functions as keywords for the database access calls DB-DECLARE, DB-OBTAIN, and DB-PROCESS.
SQL
DB-DECLARE cursorname [correlname1.]copylibname-REC
... function1[(](expression)[,expression[,Y][)]]
... function2[(](expression)[,expression[,Y][)]]
          .
          .
          .
... functionN[(](expression)[,expression[,Y][)]]
... WHERE ... 
               	 
DB-OBTAIN REC [correlname1.]copylibname-REC
... function1[(](expression)[,expression[,Y][)]]
... function2[(](expression)[,expression[,Y][)]]
          .
          .
          .
... functionN[(](expression)[,expression[,Y][)]]
... WHERE ... 
               	 
DB-PROCESS REC [correlname1.]copylibname-REC
... [DB-PROCESS-ID name]
... function1[(](expression)[,expression[,Y][)]]
... function2[(](expression)[,expression[,Y][)]]
          .
          .
          .
... functionN[(](expression)[,expression[,Y][)]]
... WHERE ...
 
               	 DB-OBTAIN .. REC PARTDESC-REC .. WHERE .. MAX (PD_LONG_DESC) = 3
DB-DECLARE D2MAST-CURSOR D2TAB-REC ... MIN((PM_UNIT_BASE_PRICE),WS-PM-UNIT-BASE-PRICE,Y) ... COUNT((DISTINCT PM_COLOR),WS-PM-COLOR,Y) ... WHERE PM_PART_NO = :WS-PART-NO
DB-OBTAIN REC D2TAB-REC ... MAX((PM_UNIT_BASE_PRICE),WS-MAX-PRICE,Y) ... MIN((PM_UNIT_BASE_PRICE * PM_UNITS),WS-MIN-RESULT,Y) ... WHERE PM_PART_SHORT_DESC = 'WIDGET'
Generated code:
EXEC SQL SELECT
    MAX(PM_UNIT_BASE_PRICE)
    MIN(PM_UNIT_BASE_PRICE * PM_UNITS)
    into :WS-MAX-PRICE, :WS-MAX-PRICE-IND
    :WS-MIN-RESULT :WS-MIN-RESULT-IND
    FROM AUTHID.D2MASTER
    WHERE PM_PART_SHORT_DESC = 'WIDGET'
END-EXEC.
 
               	 DB-OBTAIN REC D2TAB-REC ... SUM(PM_UNITS) ... AVG((PM_UNITS),WS-AVG-UNITS,Y) ... WHERE PM_PART_NO = '23432'
Generated code:
EXEC SQL select
    SUM(PM_UNITS)
    AVG(PM_UNITS)
    INTO :D2TAB-REC.PM-UNITS :IND-D2TAB-REC.IND-PM-UNITS,
    :WS-AVG-UNITS :WS-AVG-UNITS-IND
    FROM AUTHID.D2MASTER
    WHERE PM_PART_NO = '23432'
END-EXEC.
 
               	 DB-OBTAIN REC D2MASTER-REC ... MAX((PM-UNITS),WS-MAX-PM-UNITS) ... COUNT((*),WS-PM-COUNT-FLD) ... AVG((PM-UNIT-BASE-PRICE),WS-AVG-PRICE) ... WHERE PM-PART-SHORT-DESC='WIDGET' ... AND PM-COLOR='RED'
Generated code:
EXEC SQL select
    MAX(PM-UNITS)
    MIN(PM-UNIT-BASE-PRICE)
    COUNT(*)
    AVG(PM-UNIT-BASE-PRICE)
    INTO WS-MAX-PM-UNITS WS-MAX-PM-UNITS-IND,
    WS-PM-COUNT-FLD,
    WS-AVG-PRICE WS-AVG-PRICE-IND
    FROM AUTHID.D2MASTER
    WHERE PM-PART-SHORT-DESC='WIDGET'
    AND PM-COLOR='RED'
END-EXEC.
 
               	 DB-OBTAIN REC D2INVEN-REC ... IN_PART_NO ... DATE(IN_DATE_LAST_UPDTE) ... TIME((IN_TIME_LAST_UPDTE),WS-TIME-RETURN,Y) ... CHAR((IN_DATE_LAST_ORDER,ISO),WS-CHAR-RETURN) ... IN_QTY_ONHAND ... WHERE IN_PART_NO = '23432'
Generated code:
EXEC SQL SELECT
    IN_PART_NO
    DATE(IN_DATE_LAST_UPDTE)
    TIME(IN_TIME_LAST_UPDTE)
    CHAR(IN_DATE_LAST_ORDER,ISO)
    IN_QTY_ONHAND
    INTO :D2INVEN-REC.IN-PART-NO,
    :D2INVEN-REC.IN-DATE-LAST-UPDTE 
    :IND-D2INVEN-REC.IN-DATE-LAST-UPDTE,
    :WS-TIME-RETURN :WS-TIME-RETURN-IND,
    :WS-CHAR-RETURN :WS-CHAR-RETURN-IND,
    :D2INVEN-REC.IN-QTY-ONHAND 
    :IND-D2INVEN-REC.IN-QTY-ONHAND
    FROM AUTHID.D2INVTRY
    WHERE IN_PART_NO = '23432'
END-EXEC.