Oracle
 sql >> Base de données >  >> RDS >> Oracle

expression oracle de type incorrect lors de la vérification de la variable

Ce n'est pas ainsi que vous devez comparer les valeurs de data_length et data_precision . Comparez-les comme des nombres appropriés, ne les convertissez pas en chaîne :

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;
/

Notez que le SELECT COUNT(*) après la première sélection est inutile. S'il n'y a pas une telle colonne, le premier SELECT data_length, data_precision INTO lancera déjà un ORA-01403: no data found exception et le code n'atteindra jamais la vérification si la colonne existe.