sql >> Database >  >> RDS >> Oracle

orakel-expressie van het verkeerde type tijdens het controleren van variabele

Dit is niet hoe u de waarden voor data_length moet vergelijken en data_precision . Vergelijk ze als juiste getallen, converteer dat niet naar een 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;
/

Merk op dat de SELECT COUNT(*) na de eerste selectie is nutteloos. Als zo'n kolom niet bestaat, de eerste SELECT data_length, data_precision INTO gooit al een ORA-01403: no data found uitzondering en de code zal nooit de controle bereiken als de kolom bestaat.



  1. CONCAT() Functie in Oracle

  2. Interactie met 2 tabellen:invoegen, resultaat krijgen, invoegen

  3. MYSQL importeert gegevens uit csv met LOAD DATA INFILE

  4. Hoe kan ik een kolom toevoegen die geen nulls toestaat in een Postgresql-database?