我有一个导入文件并登录到Oracle数据库的talend作业,日志表架构是这样的(没有id):
filename | staus | try_number
-----------------------------
f1 |imorted | 1
f2 |detected| 0
f3 |detected| 3
最初,所有文件都有状态"检测到",所以它们还没有导入,导入尝试次数为0,我想增加每个导入尝试的尝试次数,显而易见的解决方案是获取当前" try_nmber"通过select语句增加它并用新的表更新表,但查询将非常难看:
update mytable set
try_number = (select try_number from mytable where
field1= value1 and
field2= value2 and
filed3= value3)
+1
where field1= value1 and
field2= value2 and
filed3= value3
我无法通过Talend或Oracle找到任何智能解决方案来增加所选行的字段而不检索当前值,任何想法?
答案 0 :(得分:1)
试试这个:
UPDATE MYTABLE
SET TRY_NUMBER = NVL (TRY_NUMBER, 0) + 1
WHERE FIELD1 = VALUE1 AND FIELD2 = VALUE2 AND FILED3 = VALUE3;
NVL用于处理TRY_NUMBER为NULL的情况。
由于Oracle中的NULL + 1 = NULL,我们必须在一个实体中转换NULL,您可以将其与1返回1相加。
如果TRY_NUMBER为NULL,NVL会将TRY_NUMBER转换为0。