Executor de SQL e DML

Como cria uma procedure/function de banco utilizando o UTL_DB_DQL?

RTDBUT.UTL_DB_SQL.FAQ-40540
Para criar uma função de banco pela ferramenta RTDBUT.UTL_DB_SQL, é necessário ter o cuidado de não terminar nenhuma linha com ";" a não ser que seja a linha que encerra o comando de criação do mesmo, ou seja, deve-se deslocar os ";" do código do procedimento ou função de banco para o início da linha seguinte ou emendar os trechos de forma a evitar que a linha termine com ";":

Exemplo:

Ao invés de escrever assim,
CREATE OR REPLACE FUNCTION show_cities() RETURNS refcursor AS $$
   DECLARE
     ref refcursor;
   BEGIN
     OPEN ref FOR SELECT city, state FROM cities;
     RETURN ref;
   END;
   $$ LANGUAGE plpgsql;

Deve-se escrever assim:
CREATE OR REPLACE FUNCTION show_cities() RETURNS refcursor AS $$
   DECLARE ref refcursor; BEGIN
     OPEN ref FOR SELECT city, state FROM cities
     ; RETURN ref
  ; END
; $$ LANGUAGE plpgsql;