Hi i want to update a specific row of my oracle database via apex. So i need to reach/address the specific row via where clause.
example entries:
GATTUNG | ART | UNTERART | ABART | VARIETÄT |
---|---|---|---|---|
AAA | AAA | AAA | NULL | NULL |
AAA | AAA | NULL | NULL | AAA |
AAA | AAA | NULL | NULL | NULL |
Now i have two approaches.
first:
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));
second:
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.);
the differences of both approaches are the P1_WHERE_...
variables.
- the first one use for example :P1_UNTERART and contains the whole value
- the second one use for example &P1_WHERE_UNTERART. and contains
= '&P1_UNTERART.'
ORIS NULL
my problem is:
- the first one updates all entries if i only set GATTUNG and ART (if i do not specify one of the other variables)
- the second will work, but is not the right approach as I should be using binding variables instead of
&VAR.
So my question is, how can i use the first approach which the desired result… 🙁
Advertisement
Answer
Does this do the trick ? It will update the rows if any of the columns have the same value as the corresponding page item or the database column and page item are both null:
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')) );