CREATE [ OR REPLACE ] FUNCTION [ schema. ] function
  [ ( argument [ IN | OUT | IN OUT ] [ NOCOPY ] datatype
       [, argument [ IN | OUT | IN OUT ] [ NOCOPY ] datatype
       ]...
    )
  ]
  RETURN datatype
  [ { invoker_rights_clause
    | DETERMINISTIC
    | parallel_enable_clause
    }...
  ]
  { { AGGREGATE | PIPELINED }
    USING [ schema. ] implementation_type
  | [ PIPELINED ] { IS | AS } { pl/sql_function_body | call_spec }
  } ;