ORA-01722: número inválido

Quando eu executo a minha View, ocorre o seguinte erro:

ORA-01722: número inválido
01722. 00000 -  "invalid number"
*Cause:    The specified number was invalid.
*Action:   Specify a valid number.

segue view:

SELECT
  SA.IDEN_CONS_ANUAL_CCONTABIL,
  SA.CD_EXERCICIO,
  UO.CD_UNIDADE_ORCAMENTARIA CDUO,
  UO.DS_UNIDADE_ORCAMENTARIA DSUO,
  UO.DS_SIGLA SIGLA_UO,
  UG.CD_UNIDADE_GESTORA CDUG,
  UG.DS_UNIDADE_GESTORA DSUG,
  O.CD_ORGAO,
  (
    case
      when o.flg_tp_poder = 1 and tp.cd_tipo_poder = 1 then 5
      when o.flg_tp_poder = 1 and tp.cd_tipo_poder = 2 then 4
      else o.flg_tp_poder
    end
  ) as cd_tipo_poder,
  (
    CASE FR.FLAG_EXERCICIO_ANTERIOR
      WHEN 857 THEN FR.CD_FONTE_RECURSO
      WHEN 856 THEN (
        SELECT FR2.CD_FONTE_RECURSO 
        FROM FONTE_RECURSO FR2 
        WHERE FR2.ID_FRECURSO_EXERCICIO_ANT=FR.ID_FONTE_RECURSO
      )
    END
  ) CD_FTE_EXE,
  (
    CASE FR.FLAG_EXERCICIO_ANTERIOR
      WHEN 857 THEN FR.DS_FONTE_RECURSO
      WHEN 856 THEN (
        SELECT FR2.DS_FONTE_RECURSO 
        FROM FONTE_RECURSO FR2
        WHERE FR2.ID_FRECURSO_EXERCICIO_ANT=FR.ID_FONTE_RECURSO
      )
    END
  ) DS_FTE_EXE,
  (
    CASE FR.FLAG_EXERCICIO_ANTERIOR
      WHEN 857 THEN (
        SELECT FR2.CD_FONTE_RECURSO 
        FROM FONTE_RECURSO FR2
        WHERE FR2.ID_FONTE_RECURSO=FR.ID_FRECURSO_EXERCICIO_ANT
      )
      WHEN 856 THEN FR.CD_FONTE_RECURSO
    END
  ) CD_FTE_ANT,
  (
    CASE FR.FLAG_EXERCICIO_ANTERIOR
      WHEN 857 THEN (
        SELECT FR2.DS_FONTE_RECURSO 
        FROM FONTE_RECURSO FR2
        WHERE FR2.ID_FONTE_RECURSO=FR.ID_FRECURSO_EXERCICIO_ANT
      )
      WHEN 856 THEN FR.DS_FONTE_RECURSO
    END
  ) DS_FTE_ANT,
  CBA.CODG_CONTA_BANCARIA CODG_CBA,
  CBA.NOME_CONTA_BANCARIA NOME_CBA,
  CBA.IDEN_CONTA_BANCARIA IDEN_CBA,
  'LIBERADO' TIPO_SALDO,
  CC.CODG_CONTA_CONTABIL,
  SA.NUMR_CONTA_CORRENTE,
  -SA.SALDO_ANUAL SALDO_ANUAL
FROM 
  ACWTB0090 SA,
  ACWTB0032 CC,
  ACWTB0044 CBA,
  UNIDADE_GESTORA UG,
  UNIDADE_ORCAMENTARIA UO,
  FONTE_RECURSO FR,
  ORGAO O,
  TIPO_PODER TP
WHERE 
  SA.IDEN_CONTA_CONTABIL=CC.IDEN_CONTA_CONTABIL
  AND SA.ID_UNIDADE_GESTORA=UG.ID_UNIDADE_GESTORA
  AND UG.ID_UNIDADE_ORCAMENTARIA=UO.ID_UNIDADE_ORCAMENTARIA
  AND UO.ID_ORGAO = O.ID_ORGAO
  AND O.ID_TIPO_PODER = TP.ID_TIPO_PODER (+)
  AND SUBSTR(SA.NUMR_CONTA_CORRENTE,1,3)=TO_CHAR(FR.CD_FONTE_RECURSO)
  AND SA.CD_EXERCICIO=FR.CD_EXERCICIO
  AND TO_NUMBER(SUBSTR(SA.NUMR_CONTA_CORRENTE,-5))=CBA.CODG_CONTA_BANCARIA
  AND SA.CD_EXERCICIO=CBA.CD_EXERCICIO

  --AQUI OCORRE O ERRO -------------------------------------
  AND CC.CODG_CONTA_CONTABIL IN (
    CASE
      WHEN SA.CD_EXERCICIO <= 2021 THEN '7.9.2.0.0.00.00.77'
      WHEN SA.CD_EXERCICIO <= 2021 THEN '7.9.2.0.0.00.00.78'
      WHEN SA.CD_EXERCICIO <= 2021 THEN '7.9.2.0.0.00.00.79'
      WHEN SA.CD_EXERCICIO >= 2022 THEN '7.9.9.4.1.07.00.00'
      WHEN SA.CD_EXERCICIO >= 2022 THEN '7.9.9.4.1.08.00.00'
      WHEN SA.CD_EXERCICIO >= 2022 THEN '7.9.9.4.1.09.00.00'
    END
  )
  -----------------------------------------------------------------------                           
  --AND CC.CODG_CONTA_CONTABIL IN('7.9.2.0.0.00.00.77','7.9.2.0.0.00.00.78','7.9.2.0.0.00.00.79')
  AND UG.CD_UNIDADE_GESTORA<>0
  AND UO.CD_UNIDADE_ORCAMENTARIA NOT IN(39901,99000)
  AND UO.FLG_ATIVO=1
  AND SA.SALDO_ANUAL<>

Qual o tipo da coluna CODG_CONTA_CONTABIL?

Bom dia

VARCHAR2(18 BYTE)

Para simular esse erro, eu fiz a comparação do when aqui usando tipos diferentes, ex.: o tipo da coluna é difernete do valor onde é verificado o menor ou igual.

Qual o tipo da coluna CD_EXERCICIO?

esse campo está definido como NUMBER(4,0)

Lucas_Camara, muito obrigado pela atenção, refiz de outra forma,

1 curtida