sql >> データベース >  >> RDS >> Oracle

ORA-01438:指定された精度よりも大きい値でこの列が許可されます-参照している列を取得するにはどうすればよいですか?

    プロシージャを作成して、列を1つずつ更新する必要があると思います。

    次のような更新があるとしましょう:

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

    次に、これによってすべての列をループできます:

    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;    
    

    あまり効率的ではないため、エラーが表示されるはずです。



    1. OracleDatabaseでのPL/SQL例外処理の概要

    2. URLからドメインを抽出するMySQLクエリ

    3. Oracle SQLクエリ:時間に基づいてグループごとに最新の値を取得します

    4. MySQL-concatおよびgroup_concatを使用して行の値を列名として表示する方法