sql >> Databáze >  >> RDS >> Oracle

ORA-01438:hodnota větší než specifikovaná přesnost umožňuje tento sloupec - Jak zjistím, na který sloupec se odkazuje?

Myslím, že musíte napsat postup a pokusit se sloupec jeden po druhém aktualizovat.

Řekněme, že máte aktualizaci jako je tato:

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

Potom můžete procházet všechny sloupce takto:

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;    

Není příliš efektivní, měli byste vidět chybu.



  1. nhibernate, volání funkce v Oracle, která vrací sys refcursor

  2. Jak zpracovat velké mysql dotazy

  3. Jak sql server třídí vaše data?

  4. Zobrazte názvy oddělení pomocí kurzorů. Vytvořte blok PL/SQL pro zobrazení všech názvů oddělení z tabulky oddělení pomocí kurzorů