Sql Oracle更新问题与操作员和
我在oracle中有一个暂存表,所有列都设置为varchar2以接受来自excel导入功能的文本数据。一旦数据被大容量复制到staging表中,我将验证验证失败的记录的数据&标记错误 我的一条验证语句抛出了一个“无效数字”错误。当左侧出现故障时,是否有任何方法可以阻止oracle评估右侧和状态 我的update语句如下&AMT列包含文本非数字数据Sql Oracle更新问题与操作员和,sql,oracle,sql-update,Sql,Oracle,Sql Update,我在oracle中有一个暂存表,所有列都设置为varchar2以接受来自excel导入功能的文本数据。一旦数据被大容量复制到staging表中,我将验证验证失败的记录的数据&标记错误 我的一条验证语句抛出了一个“无效数字”错误。当左侧出现故障时,是否有任何方法可以阻止oracle评估右侧和状态 我的update语句如下&AMT列包含文本非数字数据 UPDATE StagingTable SET ErrorTXT = Error_txt || 'Invalid Amount, ' WHERE f_
UPDATE StagingTable
SET ErrorTXT = Error_txt || 'Invalid Amount, '
WHERE f_isnumber (INV_AMT) > 0
AND TO_NUMBER (INV_AMT) > 9999999999.99;
库存金额列作为垃圾非数字数据。我希望条件的左侧计算为false,对于非数字数据,应该停止右侧的计算&因此不应该抛出无效数字错误。
有什么提示我可以使用吗?如果您使用的是Oracle 12.2或更高版本,您可以在转换错误时使用
和TO\u NUMBER
,如下所示,这样您就不需要f\u isnumber
功能:
UPDATE StagingTable
SET ErrorTXT = Error_txt || 'Invalid Amount, '
WHERE TO_NUMBER(INV_AMT DEFAULT -1 ON CONVERSION ERROR) > 9999999999.99;
干杯 如果您使用的是Oracle 12.2或更高版本,您可以使用ON CONVERSION ERROR
和TO_NUMBER
,如下所示,这样您就不需要f_isnumber
功能:
UPDATE StagingTable
SET ErrorTXT = Error_txt || 'Invalid Amount, '
WHERE TO_NUMBER(INV_AMT DEFAULT -1 ON CONVERSION ERROR) > 9999999999.99;
干杯 您还可以使用大小写
表达式。假设函数f_isnumber()
执行此测试:
WHERE (CASE WHEN f_isnumber(INV_AMT) > 0 THEN TO_NUMBER(INV_AMT)
END) > 9999999999.99;
如果不是,则可以使用正则表达式:
WHERE (CASE WHEN REGEXP_LIKE(INV_AMT, '^-?[0-9]*([.][0-9])?[0-9]*')
THEN TO_NUMBER(INV_AMT)
END) > 9999999999.99;
您还可以使用大小写
表达式。假设函数f_isnumber()
执行此测试:
WHERE (CASE WHEN f_isnumber(INV_AMT) > 0 THEN TO_NUMBER(INV_AMT)
END) > 9999999999.99;
如果不是,则可以使用正则表达式:
WHERE (CASE WHEN REGEXP_LIKE(INV_AMT, '^-?[0-9]*([.][0-9])?[0-9]*')
THEN TO_NUMBER(INV_AMT)
END) > 9999999999.99;
执行两次更新,或在WHERE子句中使用大小写表达式。可能的重复项:执行两次更新,或在WHERE子句中使用大小写表达式。可能的重复项:这看起来是一个不错的选项。我的oracle版本显示12.2。但是上面显示默认语法问题的语句。[Error]ORA-43907(195:47):PL/SQL:ORA-43907:此参数必须是文本或绑定变量。这就是我看到的错误。不过我可以在select语句中使用它。请向我显示您遇到此错误的确切代码。我想您在默认条款中一定使用了不同的值或函数,我可以运行该语句。我猜只有在编译包时才会抛出这个错误。这看起来是个不错的选择。我的oracle版本显示12.2。但是上面显示默认语法问题的语句。[Error]ORA-43907(195:47):PL/SQL:ORA-43907:此参数必须是文本或绑定变量。这就是我看到的错误。不过我可以在select语句中使用它。请向我显示您遇到此错误的确切代码。我想您在默认条款中一定使用了不同的值或函数,我可以运行该语句。我猜只有在编译包时才会抛出这个错误。