[ schema. ] function_name
  [ ( parameter_declaration [, parameter_declaration]... ) ]
  RETURN datatype [ sharing_clause ]
  [ { invoker_rights_clause
    | accessible_by_clause
    | DETERMINISTIC
    | parallel_enable_clause
    | result_cache_clause 
    | default_collation_clause
    }...
  ]
  { { AGGREGATE | PIPELINED }  USING [ schema. ] implementation_type
  | [ PIPELINED ] { IS | AS } { [ declare_section ] body 
                              | call_spec
                              }
  } ;