sql >> Databáze >  >> RDS >> Oracle

výraz oracle nesprávného typu při kontrole proměnné

Takto byste neměli porovnávat hodnoty pro data_length a data_precision . Porovnejte je jako správná čísla, nepřevádějte je na řetězec:

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

Všimněte si, že SELECT COUNT(*) po první volba je k ničemu. Pokud takový sloupec neexistuje, první SELECT data_length, data_precision INTO již vyvolá ORA-01403: no data found výjimku a kód nikdy nedosáhne kontroly, zda sloupec existuje.



  1. Oprava Flyway vyvolá výjimku FlywaySqlException s Oracle DB

  2. Nemohu spustit prohlížeč SQL Server

  3. MayBeSQL přichází do Microsoft Access!

  4. najít místo obsazené záznamy v mysql