【问题标题】:How do I update the two different tables using if and else condition in Oracle SQL server?如何在 Oracle SQL Server 中使用 if 和 else 条件更新两个不同的表?
【发布时间】:2021-11-14 18:59:57
【问题描述】:

这是我需要转换为过程的查询。

MERGE INTO table1 SAI
 USING
 <IF> :SITE_PROJECTS_ID: != null &&:SITE_PROJECTS_ID: != 0 <THEN>(SELECT * from table2)AX
 ON (SAI.SITE_INFO_ID=AX.SITE_INFO_ID)
 WHEN MATCHED THEN UPDATE SET
 SAI.column1 = AX.column1,
 SAI.column2 = AX.column2,
 SAI.LAST_MODIFIED_BY = AX.LAST_MODIFIED_BY,
 SAI.LAST_MODIFIED_DATE = SYSDATE
 <ELSE>
 DUAL ON (SAI.SITE_INFO_ID=:SITE_INFO_ID:)
 WHEN MATCHED THEN UPDATE SET
 <IF> :value1: != null && :value2: != '' <THEN> SAI.SITE_TRAKER_SITE_ID = :value3:, <ENDIF>
  SAI.LAST_MODIFIED_DATE = sysdate
 <ENDIF>"

上面的merge语句需要转换成下面的PL/SQL格式:

DECLARE v_rowcount NUMBER DEFAULT 0;
BEGIN 
FOR ax IN ( SELECT * FROM table2 ) 
LOOP 
UPDATE table1 SET status = ax.status 
WHERE project_id = ax.site_projects_id;
v_rowcount := SQL%rowcount; 
IF ( v_rowcount = 0 ) 
THEN INSERT INTO table1 ( fuze_project_id, status ) 
VALUES ( ax.site_projects_id, ax.status ); v_rowcount := 0; 
END IF; 
END LOOP;
END;/

我对更新两个表感到困惑,因为当满足条件时我需要一个不同的表,否则我得到的是 DUAL 表,并且会进行适当的更新。

请指导我如何进行和完成这项任务。

【问题讨论】:

  • IF-ELSE 语句的不同分支中使用两个 MERGE 语句。
  • 我需要将此合并转换为上面提到的PL/SQL 格式,我想使用两个不同的For 语句作为条件满足和其他条件,并在每个条件中进行更新他们。

标签: sql oracle plsql merge-statement


【解决方案1】:

只需使用IF-ELSE 语句并将MERGE 语句一分为二:

BEGIN
  IF :SITE_PROJECTS_ID != 0 THEN
    MERGE INTO table1 SAI
    USING table2 AX
    ON (SAI.SITE_INFO_ID=AX.SITE_INFO_ID)
    WHEN MATCHED THEN
      UPDATE
      SET SAI.column1 = AX.column1,
          SAI.column2 = AX.column2,
          SAI.LAST_MODIFIED_BY = AX.LAST_MODIFIED_BY,
          SAI.LAST_MODIFIED_DATE = SYSDATE;
  ELSIF :value1 IS NOT NULL AND :value2 IS NOT NULL THEN
    UPDATE table1
    SET SITE_TRAKER_SITE_ID = :value3,
        LAST_MODIFIED_DATE  = sysdate;
  END IF;
END;
/

注意:!= NULL 永远不会是真的;你想要IS NOT NULL。此外,在 Oracle 中,''NULL 相同。

【讨论】:

  • 感谢@MT0 的建议。
猜你喜欢
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 2012-12-11
相关资源
最近更新 更多