Ajuda em PL/SQL por favor

Galera, estou com um problema em PL/SQl e gostaria de saber se alguém que utiliza mais do que eu tem ideia do que pode ser.

DECLARE
  CURSOR muns IS 
    SELECT DISTINCT(codigo) FROM nomes WHERE codigo IS NOT NULL; 
    
  mun VARCHAR(100);
BEGIN
  FOR mun IN muns LOOP
    UPDATE nomes
      SET padrao = 2 
      WHERE objectid in (
          SELECT nome.objectid 
          FROM nomes nome, aca_nome aca 
          WHERE upper(nome.nome) 
          LIKE '% '||aca.grafia||' %'
          AND codigo = municipio
      )
    AND padrao <> 7;
    COMMIT;
  END LOOP;
END;

O erro aparece bem na linha do LIKE, dizendo que nao pode fazer aquilo, porém se eu dou o select normal, fora da estrutura de PL ele roda normalmente.

Alguém tem ideia do que pode ser? abraços.

Olá,

A princípio o código parece estar correto, desde que o campo grafia exista realmente na tabela aca_nome.

Você pode postar o erro que está ocorrendo?

Ele ta dando erro em:

AND codigo = municipio

eu tentei fazer o cast de to_char e também nao ajudou muito, o erro foi de PLS-00382.

Cara, quando executar o seu PL/SQL ele vai mostrar um erro, com um código do Oracle.
Poste o erro que aí dá para te ajudar melhor.

Então…entendi que o erro e sobre incompatibilidade de tipos.

Quais são os tipos envolvidos na expressão?

flws

ORA-06550: line 14, column 25:
PLS-00382: expression is of wrong type
06550. 00000- "line %s, column %s:\n%s"
*cause: Usually a PL/SQL compilation error.
*Action:
Error at line: 9

creio que ele está dando o erro pois estou instanciando o cursor e comparando com string, mas ja tentei converter e nao consegui.

O campo codigo da tabela nomes é VARCHAR2, o do ponteiro, tentei alterar a minha variavel de VARCHAR pra VARCHAR2 porém nao deu efeito nenhum também.

sephct,

Notei que no for (loop) vc não está utilizando a variavel do cursor “mun” em lugar nenhum.

Por um acaso expressão não seria assim?

a) AND mun.codigo = municipio b) AND codigo = mun.municipio

O fato é que vc teria que utilizar a variável do cursor em algum ponto dentro do loop e eu não estou vendo isso.

Essa linha?

Acho que não serve pra nada, verifique.

Sugiro colocar uma alias na coluna desta instrução:

flws