Talend-Oracle:选定一行的增量字段
Talend-Oracle: Increment field of selected one row
我有一个导入文件并登录到 Oracle 数据库的 talend 作业,日志 table 架构是这样的(没有 ID):
filename | staus | try_number
-----------------------------
f1 |imorted | 1
f2 |detected| 0
f3 |detected| 3
最初,所有文件的状态为 "detected",因此它们尚未导入且导入尝试编号为 0,我想为每次导入尝试增加尝试编号,显而易见的解决方案是获取当前 "try_nmber" 通过 select 语句递增它并用新的更新 table,但查询将非常难看:
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 找到任何智能解决方案来增加 selected 行的字段而不检索当前值,有什么想法吗?
试试这个:
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。
NVL 在 TRY_NUMBER 为 NULL 的情况下将 TRY_NUMBER 转换为 0。
我有一个导入文件并登录到 Oracle 数据库的 talend 作业,日志 table 架构是这样的(没有 ID):
filename | staus | try_number
-----------------------------
f1 |imorted | 1
f2 |detected| 0
f3 |detected| 3
最初,所有文件的状态为 "detected",因此它们尚未导入且导入尝试编号为 0,我想为每次导入尝试增加尝试编号,显而易见的解决方案是获取当前 "try_nmber" 通过 select 语句递增它并用新的更新 table,但查询将非常难看:
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 找到任何智能解决方案来增加 selected 行的字段而不检索当前值,有什么想法吗?
试试这个:
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。
NVL 在 TRY_NUMBER 为 NULL 的情况下将 TRY_NUMBER 转换为 0。