The persistent stored module facility of SQL provides a method to encode complex algorithm using well-known programming features.
control_statement:
case_statement
| if_statement
| while_statement
| return_statement
case_statement:
CASE scalar_exp when_statement [when_statement [...]] [ ELSE procedure_statement_list ] END CASE
| CASE when_statement [when_statement [...]] [ ELSE procedure_statement_list ] END CASE
when_statement:
WHEN scalar_exp THEN procedure_statement_list
if_statement:
IF scalar_exp THEN procedure_statement_list [ if_opt_else ] END IF
if_opt_else:
ELSE procedure_statement_list
| ELSEIF scalar_exp THEN procedure_statement_list [ if_opt_else ]
while_statement:
[ ident ':' ] WHILE scalar_exp DO procedure_statement_list END WHILE [ ident ]
return_statement:
RETURN return_value
return_value:
select_no_parens
| scalar_exp
| TABLE '(' select_no_parens ')'
procedure_statement_list:
/* empty */
| procedure_statement_list procedure_statement ';'
procedure_statement:
transaction_statement
| update_statement
| schema
| grant
| revoke
| create_statement
| drop_statement
| alter_statement
| declare_statement
| set_statement
| control_statement
| call_statement
| analyze_statement
| SelectStmt
call_statement:
CALL func_ref
| '{' CALL func_ref '}'
func_ref:
qfunc '(' ')'
| qfunc '(' expr_list ')'
qfunc:
ident
| ident '.' ident
expr_list:
scalar_exp
| expr_list ',' scalar_exp