sql - ORA-01438 : value larger than specified precision allows for this column - How do i get which column it is referring to?

标签 sql oracle plsql

我们是否有任何标准的 oracle 错误表或任何东西来识别我输入的值大于指定精度的表中的哪一列。
ORA-01438: value larger than specified precision allows for this column - 我如何获得它所指的列?

最佳答案

我觉得你得写个程序,试着一一更新专栏。

假设您有这样的更新:

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;    

效率不高,您应该会看到错误。

关于sql - ORA-01438 : value larger than specified precision allows for this column - How do i get which column it is referring to?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32655299/

相关文章:

sql - mysql 查询中的下一行和上一行

SQL Server 2008 - 缩小事务日志 - 有什么自动化方法吗?

sql - 如何使用Oracle SQL Developer导出数据?

sql - Oracle 过程对在过程之外运行良好的选择查询感到不满

mysql - 仅过滤属于第三张表中某物的用户

sql - ora-1658 : unable to creat initial extent for segment in tablespace

ssl - XE中是否存在Oracle Wallet manager

oracle - 如何使用 PL/SQL 创建 PDF 报告

java - 无法通过 JDBC 连接到虚拟机上的 Oracle 11g : Connection reset

java - 无法从数据源获取数据库连接