Oracle
 sql >> Baza danych >  >> RDS >> Oracle

wyrażenie oracle niewłaściwego typu podczas sprawdzania zmiennej

Nie tak należy porównywać wartości dla data_length i data_precision . Porównaj je jako prawidłowe liczby, nie konwertuj tego na ciąg:

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

Zwróć uwagę, że SELECT COUNT(*) po pierwszy wybór jest bezużyteczny. Jeśli nie ma takiej kolumny, pierwszy SELECT data_length, data_precision INTO już wyrzuci ORA-01403: no data found wyjątek i kod nigdy nie dotrze do sprawdzenia, czy kolumna istnieje.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klient błyskawiczny dla systemów Linux i Oracle

  2. Najlepszy sposób na porównanie VARCHAR2 z CHAR

  3. Labirynt dostrajania wydajności

  4. PreparedStatement i setTimestamp w Oracle jdbc

  5. Instalowanie rozszerzenia oci8 w Linuksie dla php?