sql >> Databasteknik >  >> RDS >> Oracle

ORA-01438:värde större än specificerad precision tillåter denna kolumn - Hur får jag fram vilken kolumn den syftar på?

Jag tror att du måste skriva en procedur och försöka uppdatera kolumnen en efter en.

Låt oss säga att du har en uppdatering så här:

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

Sedan kan du loopa över alla kolumner med detta:

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;    

Inte särskilt effektivt, du bör se felet.



  1. MySQL - Tusentals separator

  2. BESTÄLL EFTER positiva och negativa nummer separat i MySQL-satsen

  3. Hur man aktiverar Postgis Query i Spark SQL

  4. Hur man får värdet dbms.output returnerat av ett PL-SQL-block i C#