Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ORA-01438:giá trị lớn hơn độ chính xác được chỉ định cho phép đối với cột này - Làm cách nào để lấy cột mà nó đang đề cập đến?

Tôi nghĩ bạn phải viết một thủ tục và cố gắng cập nhật từng cột một.

Giả sử bạn có một bản cập nhật như sau:

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

Sau đó, bạn có thể lặp lại tất cả các cột bằng cách này:

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;    

Không hiệu quả lắm, bạn sẽ thấy lỗi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PL / SQL trên SquirreL SQL Client 3.7.1

  2. Phạm vi mã cho PL / SQL

  3. Tạo thủ tục PL / SQL trực tuyến để nhập dữ liệu trong bảng Oracle

  4. Сtạo máy ảo với hộp ảo Oracle VM

  5. Oracle cắt bỏ khoảng trắng ở bên trong chuỗi