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 types 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, objects (from Java™, built-in or extension classes), BYTE/TEXT, STRING (but cannot be modified) |