Potrzebuję zmodyfikować procedurę w sqlu która aktualizowałaby mi dane w kilku tabelach ale z pewnymi warunkami:
- ilość tabel córek może się zmieniać
- NrOferty składa się z np AA00001 czyli dwie pierwsze to zawsze litery które określają właściciela oferty
Chciałbym zrobić tak aby była np dodatkowa tabela która przechowywałaby nazwę tabeli córki i te dwie pierwsze litery np AA, CG, HH itp.
Zamysł ogólnie jest taki aby po każdej zmianie danych w tabeli matce, automatycznie aktualizowały się tabele córki ale tylko te tabele w których te oferty są.
czyli:
tabela corka1 ma oferty AA00001, BC00001, NN00003
tabela corka2 ma oferty AA00005, BC00003, NN00006
tabela corka3 ma oferty AA00001, BC00006, NN00009
i teraz zmienia sie oferta AA00001 czyli aktualizuje się tabela corka1 i corka3
zmienia się oferta AA00005 czyli aktualizuje się tabela corka2
Podsumowując:
- jedna tabela matka zawierająca wszystkie oferty
- zmienna ilość tabel córek które będą zawierać oferty z tabelki matki
ale spełniające określone warunki czyli określone prefiksy
- procedura która to wszystko obsłuży bez grzebaania w niej za każdym
razem gdy pojawi sie nowa tabela córka. Czyli taka która pobierze nazwę tabeli córki i prefixy oferty które mają się w niej znaleźć
czy ktoś mi pomoże?
DROP PROCEDURE `syncing`//
CREATE DEFINER=`root`@`localhost` PROCEDURE `syncing`(IN id_new
bigint(20))
BEGIN
REPLACE INTO oferty_kopia (`IdOferty`, `NrOferty`, `TypUmowy`,
`TypTrans`, `Rynek`, `TypNier`, `Kraj`, `Wojewodztwo`, `Gmina`,
`Powiat`, `Miejscowosc`, `Osiedle`, `Ulica`, `Powierzchnia`,
`RodzWlas`, `PowDzialki`, `RodzWlasDzialki`, `Pietro`, `WysBud`,
`LiczbaPok`, `RokBudowy`, `Ogrzewanie`, `StanTech`, `Balkon`, `Garaz`,
`JasnaKuchnia`, `Ogrodek`, `Piwnica`, `PowPiwnicy`, `Umeblowane`,
`WcOsobno`, `Winda`, `TypBudynku`, `TypObiektu`, `UzbGaz`, `UzbKana`,
`UzbPrad`, `UzbSzambo`, `UzbWoda`, `LiczbaZabudowan`,
`ZapleczeSocjalne`, `Opis`, `CenaMetra`, `Cena`, `WalutaCeny`,
`Zdjecia`, `DataWprow`, `DataModyf`, `DataWydania`, `Opiekun`,
`TelOpiekun`, `NrLic`, `Specjalna`, `Latitude`, `Longitude`,
`ZoomMapy`, `LiczWyswietlen`, `LiczEmaili`, `Liczwydr`)
SELECT `IdOferty`, `NrOferty`,
CONVERT(`TypUmowy` USING utf8),
CONVERT(`TypTrans` USING utf8),
CONVERT(`Rynek` USING utf8),
CONVERT(`TypNier` USING utf8),
CONVERT(`Kraj` USING utf8),
CONVERT(`Wojewodztwo` USING utf8),
CONVERT(`Gmina` USING utf8),
CONVERT(`Powiat` USING utf8),
CONVERT(`Miejscowosc` USING utf8),
CONVERT(`Osiedle` USING utf8),
CONVERT(`Ulica` USING utf8),
`Powierzchnia`,
CONVERT(`RodzWlas` USING utf8),
`PowDzialki`,
CONVERT(`RodzWlasDzialki` USING utf8),
`Pietro`,
`WysBud`,
`LiczbaPok`,
CONVERT(`RokBudowy` USING utf8),
CONVERT(`Ogrzewanie` USING utf8),
CONVERT(`StanTech` USING utf8),
CONVERT(`Balkon` USING utf8),
CONVERT(`Garaz` USING utf8),
CONVERT(`JasnaKuchnia` USING utf8),
CONVERT(`Ogrodek` USING utf8),
CONVERT(`Piwnica` USING utf8),
`PowPiwnicy`,
CONVERT(`Umeblowane` USING utf8),
CONVERT(`WcOsobno` USING utf8),
CONVERT(`Winda` USING utf8),
CONVERT(`TypBudynku` USING utf8),
CONVERT(`TypObiektu` USING utf8),
CONVERT(`UzbGaz` USING utf8),
CONVERT(`UzbKana` USING utf8),
CONVERT(`UzbPrad` USING utf8),
CONVERT(`UzbSzambo` USING utf8),
CONVERT(`UzbWoda` USING utf8),
`LiczbaZabudowan`,
CONVERT(`ZapleczeSocjalne` USING utf8),
CONVERT(`Opis` USING utf8),
`CenaMetra`,
`Cena`,
CONVERT(`WalutaCeny` USING utf8),
`Zdjecia`,
`DataWprow`,
`DataModyf`,
CONVERT(`DataWydania` USING utf8),
CONVERT(`Opiekun` USING utf8),
CONVERT(`TelOpiekun` USING utf8),
CONVERT(`NrLic` USING utf8),
`Specjalna`,
`Latitude`,
`Longitude`,
`ZoomMapy`,
`LiczWyswietlen`,
`LiczEmaili`,
`Liczwydr`
FROM `oferty_zrodlowe`
WHERE idOferty=id_new;
END
///////////////////////////////
DROP TRIGGER IF EXISTS `testowa`.`sync_when_insert`//
CREATE TRIGGER `testowa`.`sync_when_insert` AFTER INSERT ON
`testowa`.`oferty_zrodlowe`
FOR EACH ROW BEGIN
CALL syncing(NEW.idOferty);
END
//
////////////////////////////////
DROP TRIGGER IF EXISTS `testowa`.`sync_when_update`//
CREATE TRIGGER `testowa`.`sync_when_update` AFTER UPDATE ON
`testowa`.`oferty_zrodlowe`
FOR EACH ROW BEGIN
CALL syncing(NEW.idOferty);
END
//
////////////////////////////////
DROP TRIGGER IF EXISTS `testowa`.`sync_when_delete`//
CREATE TRIGGER `testowa`.`sync_when_delete` AFTER DELETE ON
`testowa`.`oferty_zrodlowe`
FOR EACH ROW BEGIN
CALL syncing_del(OLD.idOferty);
END
//