Oracle
 sql >> база данни >  >> RDS >> Oracle

израз на оракул от грешен тип при проверка на променлива

Това не е начинът, по който трябва да сравнявате стойностите за data_length и data_precision . Сравнете ги като правилни числа, не преобразувайте това в низ:

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

Имайте предвид, че SELECT COUNT(*) след първият избор е безполезен. Ако няма такава колона, първата SELECT data_length, data_precision INTO вече ще изведе ORA-01403: no data found изключение и кодът никога няма да достигне проверката дали колоната съществува.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Advanced Queuing с .Net

  2. Прозоречната функция Last_value не работи правилно

  3. Как да получите правилно име в възможността за диагностика на Oracle в JDBC?

  4. Какво причинява грешката в липсващата дясна скоба в SQL?

  5. Синтаксис на Oracle SQL:Идентификатор в цитати