Runtime stack
The runtime stack is used to pass/return values to/from functions.
When passing arguments to a function or when returning values from a function, you are using the
          runtime stack. When you call a function, parameters are pushed on the stack;
        before the function code executes, parameters are popped from the stack in the local
        variables defined in the function. On the other hand, each parameter returned by a function
        is pushed on the stack and popped into variables specified in the RETURNING
        clause of the caller.
Elements are pushed on the stack in a given order, then popped from the stack in the reverse order. This is transparent to the programmer. However, if you want to implement a C extension, you must keep this in mind.
According to the data type, parameters are passed and returned by value or by reference. When an element is passed/returned by value, a complete copy of the value is passed. When an element is passed by reference, only the handle of the object is passed/returned. If the type allows it, elements passed by reference can be manipulated in the called function to modify the value.
| Mode | Data type or data structure | 
|---|---|
| By value | BOOLEAN, BIGINT,
                  INTEGER , SMALLINT, TINYINT,
                  FLOAT , SMALLFLOAT, DECIMAL,
                  MONEY, CHAR, VARCHAR,
                  DATE, DATETIME, INTERVAL,
                records and static arrays (cannot be returned). | 
            
| By reference | Dynamic arrays, dictionaries, objects (from Java,
built-in or extension classes), BYTE/TEXT, STRING
(but cannot be modified) |