Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

expressão oracle do tipo errado ao verificar a variável


Não é assim que você deve comparar os valores para data_length e data_precision . Compare-os como números apropriados, não converta isso em uma string:
DECLARE 
  old_length NUMBER;
  old_prec   NUMBER;
BEGIN

  SELECT data_length, coalesce(data_precision,0)
     INTO old_length, old_prec 
  FROM user_tab_cols 
  WHERE table_name='EX_EMPLOYEE' 
    AND column_name='ID';

  IF (old_length <> 6 and old_prec <> 2) THEN
    EXECUTE IMMEDIATE ('ALTER TABLE EX_EMPLOYEE MODIFY ID NUMERIC(6,2)');
  END IF;

END;
/

Observe que o SELECT COUNT(*) depois a primeira seleção é inútil. Se não houver tal coluna, o primeiro SELECT data_length, data_precision INTO já lançará um ORA-01403: no data found exceção e o código nunca alcançará a verificação se a coluna existir.