Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Ausdruck des falschen Typs beim Prüfen der Variablen

So sollten Sie die Werte für data_length nicht vergleichen und data_precision . Vergleichen Sie sie als echte Zahlen, wandeln Sie das nicht in einen String um:

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

Beachten Sie, dass SELECT COUNT(*) nach die erste Auswahl ist nutzlos. Wenn es keine solche Spalte gibt, die erste SELECT data_length, data_precision INTO wird bereits einen ORA-01403: no data found auslösen Ausnahme und der Code wird niemals die Überprüfung erreichen, wenn die Spalte vorhanden ist.