2
respostas

[Dúvida] Erro ao criar função no oracle, como resolver?

Erro ao criar função no oracle, como resolver?

query executada;

create or replace FUNCTION "FNCONCATENATEROWS" (queryString varchar2, delimiter varchar2 default ',')
    return CLOB
is 
    Result varchar2(32767);
    type sys_refcursor is ref cursor;
    coursorTemp sys_refcursor;
    columnResult CLOB;
begin
    open cursorTemp for
        queryString;

loop
    fetch cursorTemp into columnResult;
    EXIT WHEN cursorTemp%NOTFOUND;

    Result := Result || delimiter || columnResult;
end loop;

return (substr(Result, length(delimiter)+1));
end;

ERRO

9,5 PL/SQL: Statement ignored ERROR 9,10 PLS-00201: o identificador 'CURSORTEMP' deve ser declarado ERROR 13,5 PL/SQL: SQL Statement ignored ERROR 13,11 PLS-00201: o identificador 'CURSORTEMP' deve ser declarado ERROR 14,5 PL/SQL: Statement ignored ERROR 14,15 PLS-00201: o identificador 'CURSORTEMP' deve ser declarado ERROR

2 respostas

Oii, Willian! Tudo bem?

O erro que está ocorrendo é devido ao identificador 'CURSORTEMP' estar com um erro simples de gramática. Não se preocupe, vamos resolver juntos.

O erro está na seguinte linha do seu código:

coursorTemp sys_refcursor;

Perceba que o nome cursorestá escrito coursor, isso faz com o que o PL/SQL não reconheça o cursor, retornando a mensagem de erro que você recebeu. O certo seria:

cursorTemp sys_refcursor;

Então sugiro que realize a correção, o código refatorado ficaria assim:

create or replace FUNCTION "FNCONCATENATEROWS" (queryString varchar2, delimiter varchar2 default ',')
    return CLOB
is 
    Result varchar2(32767);
    type sys_refcursor is ref cursor;
    cursorTemp sys_refcursor;
    columnResult CLOB;
begin
    open cursorTemp for
        queryString;

loop
    fetch cursorTemp into columnResult;
    EXIT WHEN cursorTemp%NOTFOUND;

    Result := Result || delimiter || columnResult;
end loop;

return (substr(Result, length(delimiter)+1));
end;

Feito isso, observe se o código funcionará corretamente e fique à vontade para copiar o código acima.

Espero ter ajudado e continue praticando as atividades.

Bons estudos, Willian!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Obrigado pela explicação, deu certo. \o/