sql >> Database >  >> RDS >> Oracle

ORA-01438:waarde die groter is dan de opgegeven precisie voor deze kolom - Hoe kom ik erachter naar welke kolom het verwijst?

Ik denk dat je een procedure moet schrijven en proberen de kolom één voor één bij te werken.

Laten we zeggen dat je een update als deze hebt:

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

Dan kun je alle kolommen als volgt doorlopen:

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;    

Niet erg efficiënt, je zou de fout moeten zien.



  1. mysql-groep door min . te hebben

  2. Het herhalen van een ResultSet met behulp van de JDBC voor Oracle kost veel tijd ongeveer 16 seconden?

  3. SQL Server VOOR JSON AUTO Voorbeelden (T-SQL)

  4. De inhoud van Check Constraint op Oracle bekijken