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

ORA-01438:wartość większa niż określona precyzja pozwala na tę kolumnę — Jak uzyskać, do której kolumny się odnosi?

Myślę, że musisz napisać procedurę i próbować aktualizować kolumnę jedna po drugiej.

Załóżmy, że masz taką aktualizację:

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

Następnie możesz zapętlić wszystkie kolumny w ten sposób:

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;    

Niezbyt wydajny, powinieneś zobaczyć błąd.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak podzielić ciąg w PL/SQL?

  2. Zwraca wartość ze skryptu sql do skryptu powłoki

  3. Przykład wyzwalacza Oracle przed wstawieniem lub aktualizacją

  4. Oracle:Konwersja adresu IPv4 na liczbę?

  5. dynamicznie przekaż nazwę tabeli w oracle for loop