【发布时间】:2021-01-25 20:38:06
【问题描述】:
您好,我想通过 apex 更新我的 oracle 数据库的特定行。所以我需要通过 where 子句到达/解决特定行。
示例条目:
| 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_...variables。
- 第一个使用例如 :P1_UNTERART 并包含整个值
- 第二个使用例如 &P1_WHERE_UNTERART。并包含
= '&P1_UNTERART.'或IS NULL
我的问题是:
- 如果我只设置 GATTUNG 和 ART(如果我没有指定其他变量之一),第一个更新所有条目
- 第二种方法可行,但不是正确的方法,因为我应该使用绑定变量而不是
&VAR.
所以我的问题是,我如何使用第一种方法来获得所需的结果... :(
【问题讨论】:
-
当
:P1_UNTERART为空时,是否应该只在UNTERART列也为空时才更新?例如。你想要(UNTERART=:P1_UNTERART OR (UNTERART IS NULL AND :P1_UNTERART IS NULL))等 -
@kfinity no,例如,我有 3 或 6 个或 n 个条目,它们在 (GATTUNG + TYPE) + UNTERART + ABART + VARIETÄT 的组合中是唯一的。而且我总是必须能够更新其中一个 n 组合。因此:WHERE UNTERART 为空且 ABART 为空且 VARIETY 为空。然后:WHERE UNTERART 为空且 ABART 为空且 VARIETÄT = 'STRING' 下一个:WHERE UNTERART 为空且 ABART = 'String' 且 VARIETÄT 为空,依此类推
标签: sql oracle oracle-apex