User-defined functions allow you to execute subprograms written either in 3GL host languages (such as C or SQL Module language) or in the SQL procedural language. There are two classes of user- defined functions: o The external function feature consists of several discrete pieces: the routine definition, the executable, and the invocation. You define a function that points to the executable form of the routine. You code, compile, and link the routine written in a 3GL language. See CREATE Routine and CREATE MODULE for information on creating external routines. o The SQL function feature consists a module definition containing the function definition. Such SQL functions can include any SQL procedural language features (except those that change the transaction state: SET TRANSACTION, START TRANSACTION, COMMIT and ROLLBACK) and can invoke other functions, call procedures (using the CALL statement) which in turn can activate other user-defined routines. See CREATE MODULE for information on creating modules and functions in SQL. The function definitions reside in the database like any other schema object, such as a table or view. Use the SHOW FUNCTION statement to display the names of user-defined functions. See SHOW for more information and examples. Finally, you refer to the routine within an SQL statement for automatic invocation by the SQL interface. The following diagram shows how to invoke a user-defined function: function-invocation = --> <function-name> --> ( -+-----------------+-> ) --> ++-> value-expr -++ +-> DEFAULT ----+ +------ , <-----+ You invoke a user-defined function from anywhere you can specify a value expression. Some of the locations from which you can invoke an external function are: o A column using a COMPUTED BY or AUTOMATIC AS value expression clause o A CHECK clause in a table constraint, column constraint, or domain constraint o A select expression in a view definition or cursor declaration o On the right-hand side of a set-assignment-statement of a compound statement or of the SET clause of an UPDATE statement o A select list or where clause o A DEFAULT value expression clause for a domain, column or parameter