Flow of Control

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