[ 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 } } ;