Mat*_*ick 3 sql oracle plsql sql-update
我正在尝试为表创建标准的UPDATE查询.但是,如果满足某些条件,则应在UPDATE语句中包含/排除某些列.
例如:
UPDATE TBL_PROJECT SET
REVISION_COUNT = V_REVISION_COUNT
,PRIMARY_BRANCH = IN_PRIMARY_BRANCH
,PROJECT_STATUS = IN_PROJECT_STATUS
...
WHERE PROJECT_ID = IO_PROJECT_ID
AND REVISION_COUNT = IO_REVISION_COUNT
RETURNING REVISION_COUNT INTO IO_REVISION_COUNT';
Run Code Online (Sandbox Code Playgroud)
但是,该表有两列供提交和批准.因此,如果状态设置为已提交或已批准,我希望更新这些列.例如.
IF IN_PROJECT_STATUS = 'SUB'
UPDATE TBL_PROJECT SET
SUBMITTED_DATE = SYSDATE
ELSIF IN_PROJECT_STATUS = 'APP'
UPDATE TBL_PROJECT SET
APPROVED_DATE = SYSDATE
END;
Run Code Online (Sandbox Code Playgroud)
我还需要返回REVISION_COUNT和受影响的行数(rowcount)以检查更新是否成功.
编写此查询的最佳方法是什么?我假设动态查询比if-elsif-else语句更好,整个查询在每个块中几乎重复.
您可以编写单个UPDATE,并使用DECODE(或CASE)仅在in_project_status匹配时更新日期:
...
, submitted_date = DECODE( in_project_status, 'SUB', SYSDATE, submitted_date )
, approved_date = DECODE( in_project_status, 'APP', SYSDATE, approved_date )
...
Run Code Online (Sandbox Code Playgroud)
这样可以避免重复UPDATE.