Oracle Apex 更新 table 的特定行

Oracle Apex update specific row of table

您好,我想通过 apex 更新我的 oracle 数据库的特定行。所以我需要通过 where 子句 reach/address 特定行。

示例条目:

GATTUNG ART UNTERART ABART VARIETÄT
AAA AAA AAA NULL NULL
AAA AAA NULL NULL AAA
AAA AAA NULL NULL NULL

现在我有两种方法。

第一个:

UPDATE TBL_PFLANZE
SET NAMEN =:P1_NAMEN
WHERE (GATTUNG = :P1_GATTUNG AND ART = :P1_ART_KREUZUNG)
AND ((UNTERART=:P1_UNTERART OR :P1_UNTERART IS NULL) AND (VARIETÄT=:P1_VARIETAET OR :P1_VARIETAET IS NULL) AND (ABART=:P1_ABART OR :P1_ABART IS NULL));

第二个:

UPDATE TBL_PFLANZE 
SET NAMEN ='&P1_NAMEN.' 
WHERE (GATTUNG = '&P1_GATTUNG.' AND ART = '&P1_ART_KREUZUNG.') 
AND (UNTERART &P1_WHERE_UNTERART. AND VARIETÄT &P1_WHERE_VARIETAET. AND ABART &P1_WHERE_ABART.);

两种方法的区别在于P1_WHERE_...变量。

  1. 第一个使用例如:P1_UNTERART 并包含整个值
  2. 第二个使用例如&P1_WHERE_UNTERART。并包含 = '&P1_UNTERART.'IS NULL

我的问题是:

  1. 如果我只设置 GATTUNG 和 ART(如果我没有指定其他变量之一),第一个更新所有条目
  2. 第二个可行,但不是正确的方法,因为我应该使用绑定变量而不是 &VAR.

所以我的问题是,我如何使用第一种方法来获得所需的结果...:(

在我看来,第一个查询是正确的,而第二个是错误的。

为什么错了?因为您正在使用 strings。这个:

SET NAMEN ='&P1_NAMEN.' 
WHERE (GATTUNG = '&P1_GATTUNG.'

想要将 &P1_NAMEN. 字符串放入 NAMEN 列,用于 GATTUNG 列中字面上包含 &P1_GATTUNG. 字符串的所有行(并且很可能 none,所以第二个查询永远不会做任何事情。

那么,您的问题到底是什么?为什么您认为第一个查询不起作用?您是否 运行 页面处于调试模式并查看了调试结果?会不会是 P1 页面的项目没有存储到会话状态中,所以 UPDATE 语句看不到它们?

此外,您在哪里执行 UPDATE?作为按下按钮后 运行s 的过程?还有别的吗?

这样做有用吗?如果任何列与相应的页面项具有相同的值,或者数据库列和页面项均为空,它将更新行:

UPDATE tbl_pflanze
   SET
  namen = :P1_NAMEN
 WHERE
  ( gattung = :P1_GATTUNG AND art = :P1_ART_KREUZUNG)
    AND
  ( ( NVL(unterart,'X') = NVL(:P1_UNTERART,'X')) AND
    ( NVL(varietät,'X') = NVL(:P1_VARIETAET,'X')) AND
    ( NVL(abart,'X') = NVL(:P1_ABART,'X')) );