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

ORA-01438:стойност, по-голяма от зададената точност, позволява тази колона - Как да разбера за коя колона се отнася?

Мисля, че трябва да напишете процедура и да опитате да актуализирате колоната една по една.

Да приемем, че имате актуализация като тази:

UPDATE TABLE_1 a SET (COL_1, COL_2, COL_3) = 
   (SELECT COL_1, COL_2, COL_3 FROM TABLE_2 b WHERE a.COL_ID = b.COL_ID);

След това можете да преминете през всички колони чрез това:

DECLARE
    CURSOR TabColumns IS 
    SELECT column_id, column_name, data_precision, data_scale
    FROM USER_TAB_COLUMNS 
    WHERE table_name = 'TABLE_2'
       AND column_name <> 'COL_ID'
    ORDER BY 1;

BEGIN
    FOR aCol IN TabColumns LOOP
    BEGIN 
        sqlstr := 
            'UPDATE TABLE_1 a SET '||aCol.column_name ||' = '
                ||' (SELECT '||aCol.column_name ||
                ||' FROM TABLE_2 b '
                ||' WHERE  a.COL_ID = b.COL_ID)'

            EXECUTE IMMEDIATE sqlstr USING CalcDate, CalcDate;
    EXCEPTION
        WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE ( 'Error at column '|| aCol.column_id||CHR(9)|| aCol.column_name||CHR(9)||SQLERRM);
            DBMS_OUTPUT.PUT_LINE ( sqlstr );
    END;
    END LOOP;

END;    

Не е много ефективно, трябва да видите грешката.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Анализирайте XML низ, съхранен в Oracle Table

  2. Деактивирайте собствената JSF реализация на webLogic сървъра и използвайте myfaces реализация

  3. Потърсете низ за модел на регулярен израз и заменете всяко срещане като производно на себе си в oracle SQL

  4. Oracle Database Security:Одит на база данни

  5. %ROWTYPE променлива от името на таблицата