[Oracle] Update komórki z zapytania

0

Witam, mam taki problem z updatem jednej wartości, a mianowicie chciałbym wykonać coś w tym stylu:

update (select "ID_EGZAMIN","ID_OWCA","WYNIK_EGZAMINU"
from(select e.ID as PK
       , e.ID_EGZ
       , e.ID_UCZ
       , o.LOGIN
       , e.WYNIK
       from EGZ e
       INNER JOIN UCZ o on o.ID = e.ID_UCZ
       where e.ID_EGZ = 1
       )q
where "ID_UCZ"=2
) set "ID_EGZAMIN"=1, "WYNIK_EGZAMINU"='Poz'

Jednak dostaje błąd:

cannot modify a column which maps to a non key-preserved table

Jak mogę poprawnie zrobić update jak dostaje w źródle zamiast tabeli takie proste zapytanie a chcę edytować tylko WYNIK z tabeli głównej?

0

Nie możesz edytować wartości w WYNIKU ZAPYTANIA. Możesz edytować wartości w TABELI.

4
Marcin.Miga napisał(a):

Nie możesz edytować wartości w WYNIKU ZAPYTANIA. Możesz edytować wartości w TABELI.

@Marcin.Miga: w Oraclu się da ;-)

http://sqlfiddle.com/#!4/e006f/4

Z dokumentacji oraclowego sqla: https://docs.oracle.com/database/121/SQLRF/statements_10008.htm#BABGGJCE (-> DML_table_expression_clause::= -> jest subquery)

Chodzi o to, żeby w wyniku zapytania nie zginął klucz po którym Oracle może zrobić update. W przeciwnym razie Oracle zgłosi swoje zastrzeżenia, np.

  • ORA-01779: cannot modify a column which maps to a non key-preserved table".
  • ORA-01732: data manipulation operation not legal on this view

Podejrzewam, że jak op zmodyfikuje swojego selecta to powinno zadziałać:

update (select "ID_EGZAMIN","ID_OWCA","WYNIK_EGZAMINU"

na

update (select PK,"ID_EGZAMIN","ID_OWCA","WYNIK_EGZAMINU"

1 użytkowników online, w tym zalogowanych: 0, gości: 1