Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

ORA-01438:nilai yang lebih besar dari presisi yang ditentukan memungkinkan untuk kolom ini - Bagaimana cara mendapatkan kolom mana yang dirujuk?

Saya pikir Anda harus menulis prosedur dan mencoba memperbarui kolom satu per satu.

Katakanlah Anda memiliki pembaruan seperti ini:

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

Kemudian Anda dapat mengulang semua kolom dengan ini:

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;    

Tidak terlalu efisien Anda akan melihat kesalahannya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle APEX Database Trigger - Masalah dengan referensi kolom database

  2. 12c Pindahkan File Data Online

  3. Berikan perubahan hanya pada satu kolom dalam tabel

  4. Transaksi Hanya Baca Musim Semi dengan Propagasi.DUKUNGAN dengan WebSphere dan Oracle

  5. Apa itu Urutan di oracle