Diskuze: oracle update, kdyz neexistuje, jinak insert
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
kdyz to rozvedu, tak muj tip je, ze by to mohlo fungovat s touto upravou. Ale
nechci na vicemene ostre db zkouset jakesi radoby pokusne reseni, protoze pri
kazdem updatu to bude delat update nebo nic. Hlavne pri opakovani to bude delat
nic. A z toho nepoznam, zda je to ok nebo ne
WHEN MATCHED AND
src.CIS_PROJEKTU<>dest.CIS_PROJEKTU AND
src.NAZEV_KRATKY<>dest.NAZEV_KRATKY AND
src.NAZEV<>dest.NAZEV AND
src.URL<>dest.URL AND
src.DAT_ZAHAJENI<>dest.DAT_ZAHAJENI AND
src.DAT_UKONCENI<>dest.DAT_UKONCENI
THEN
UPDATE SET " . implode(", ", $values_update) . "
Asi jsem nasel reseni na strance
https://www.oracletutorial.com/…racle-merge/
MERGE INTO member_staging x
USING (SELECT member_id, first_name, last_name, rank FROM members) y
ON (x.member_id = y.member_id)
WHEN MATCHED THEN
UPDATE SET x.first_name = y.first_name,
x.last_name = y.last_name,
x.rank = y.rank
WHERE x.first_name <> y.first_name OR -- tuto cast jsem tam chtel pridat
x.last_name <> y.last_name OR --
x.rank <> y.rank --
WHEN NOT MATCHED THEN
INSERT(x.member_id, x.first_name, x.last_name, x.rank)
VALUES(y.member_id, y.first_name, y.last_name, y.rank);
tak, asi s tim precijen potrebuji poradit, jeste
MERGE INTO DATA_WAREHOUSE.CIS_PROJEKTU_SU dest USING (SELECT ID, CIS_PROJEKTU, NAZEV_KRATKY, NAZEV, URL, DAT_ZAHAJENI, DAT_UKONCENI FROM dual) src ON (dest.ID=src.ID) WHEN MATCHED THEN UPDATE SET (CIS_PROJEKTU='2020-1', NAZEV_KRATKY='House and Work', NAZEV='House and Work', URL='https://projekty.slu.cz/evid3_app.php?what=form_export2&do=export_is2_view&idform_export2=102', DAT_ZAHAJENI='2021-09-01', DAT_UKONCENI='2024-01-31') WHERE src.CIS_PROJEKTU<>dest.CIS_PROJEKTU OR src.NAZEV_KRATKY<>dest.NAZEV_KRATKY OR src.NAZEV<>dest.NAZEV OR src.URL<>dest.URL OR src.DAT_ZAHAJENI<>dest.DAT_ZAHAJENI OR src.DAT_UKONCENI<>dest.DAT_UKONCENI WHEN NOT MATCHED THEN INSERT (ID, CIS_PROJEKTU, NAZEV_KRATKY, NAZEV, URL, DAT_ZAHAJENI, DAT_UKONCENI) VALUES (('102', '2020-1', 'House and Work', 'House and Work', 'https://projekty.slu.cz/evid3_app.php?what=form_export2&do=export_is2_view&idform_export2=102', '2021-09-01', '2024-01-31'))
line=318 code=1747: ORA-01747: neplatná specifikace uživatel.tabulka.sloupec, tabulka.sloupec nebo sloupec
Tak ted nevim, kde a proc je problem.
DATA_WAREHOUSE.CIS_PROJEKTU_SU
tento zapis pro tabulku pouzivam pro
select a ten mi data vypise. Ale, treba je chyba v jinem zapise, jinde.
Ha, tak uz se mi podarilo chytit kolegu pres oracle.
Cely ten dotaz musi byt jinak preskladany a navic tam musi byt
nvl()
A navic je treba ty defaul datumy u nvl
prevest pres
to_date
- to si tam kdyztak doplnne, neni to v tohle kodu jeste
pridane.
MERGE INTO DATA_WAREHOUSE.CIS_PROJEKTU_SU dest USING (SELECT '152' AS
ID, '21-04364S' AS CIS_PROJEKTU, 'Civilistní tendence v české
meziválečné hudební kultuře' AS NAZEV_KRATKY, 'Civilistní tendence v
české meziválečné hudební kultuře' AS NAZEV,
'https://projekty.slu.cz/evid3_app.php?what=form_export2&do=export_is2_view&idform_export2=152'
AS URL, to_date ('2021-01-01', 'RRRR-MM-DD') AS DAT_ZAHAJENI, to_date
('2023-12-31', 'RRRR-MM-DD') AS DAT_UKONCENI FROM dual) src ON
(dest.ID=src.ID) WHEN MATCHED THEN UPDATE SET
CIS_PROJEKTU=src.CIS_PROJEKTU, NAZEV_KRATKY=src.NAZEV_KRATKY,
NAZEV=src.NAZEV, URL=src.URL, DAT_ZAHAJENI=src.DAT_ZAHAJENI,
DAT_UKONCENI=src.DAT_UKONCENI WHERE nvl (src.CIS_PROJEKTU, '0') <> nvl
(dest.CIS_PROJEKTU, '0') OR nvl (src.NAZEV_KRATKY, 'nevyplněno') <> nvl
(dest.NAZEV_KRATKY, 'nevyplněno') OR nvl (src.NAZEV, 'nevyplněno') <>
nvl (dest.NAZEV, 'nevyplněno') OR nvl (src.URL, '0') <> nvl (dest.URL,
'0') OR nvl (src.DAT_ZAHAJENI, '01.01.2100') <> nvl (dest.DAT_ZAHAJENI,
'01.01.2100') OR nvl (src.DAT_UKONCENI, '01.01.2100') <> nvl
(dest.DAT_UKONCENI, '01.01.2100') WHEN NOT MATCHED THEN INSERT (ID,
CIS_PROJEKTU, NAZEV_KRATKY, NAZEV, URL, DAT_ZAHAJENI, DAT_UKONCENI)
VALUES ('152', '21-04364S', 'Civilistní tendence v české meziválečné
hudební kultuře', 'Civilistní tendence v české meziválečné hudební
kultuře',
'https://projekty.slu.cz/evid3_app.php?what=form_export2&do=export_is2_view&idform_export2=152',
to_date ('2021-01-01', 'RRRR-MM-DD'), to_date ('2023-12-31', 'RRRR-MM-DD'))
Zobrazeno 5 zpráv z 5.