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_...
变量。
- 第一个使用例如:P1_UNTERART 并包含整个值
- 第二个使用例如&P1_WHERE_UNTERART。并包含
= '&P1_UNTERART.'
或 IS NULL
我的问题是:
- 如果我只设置 GATTUNG 和 ART(如果我没有指定其他变量之一),第一个更新所有条目
- 第二个可行,但不是正确的方法,因为我应该使用绑定变量而不是
&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')) );
您好,我想通过 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_...
变量。
- 第一个使用例如:P1_UNTERART 并包含整个值
- 第二个使用例如&P1_WHERE_UNTERART。并包含
= '&P1_UNTERART.'
或IS NULL
我的问题是:
- 如果我只设置 GATTUNG 和 ART(如果我没有指定其他变量之一),第一个更新所有条目
- 第二个可行,但不是正确的方法,因为我应该使用绑定变量而不是
&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')) );