Autor Téma: Trigget - After Insert -> INSERT INTO  (Přečteno 1175 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3560
  • Karma: 35
    • Verze Delphi: XE7 professional
Trigget - After Insert -> INSERT INTO
« kdy: 20-06-2018, 13:54:37 »
Kód: [Vybrat]
SET TERM ^ ;
CREATE TRIGGER DAY_COST_LFS_AI FOR DAY_COST_LFS
ACTIVE AFTER
  INSERT
POSITION 0
AS
BEGIN
  INSERT INTO Z_DAY_COST_LFS
    SELECT *
/*FKLANDLORD_FLAT, FKSERVICEPARAMETERS, FKCAANALYTICOPTIONS, FKSUBACCOUNTS, KINDENERGY, PRICEUNIT_VAT, DEPOSIT,
PAY, BILLING, DATEFROM, DATETO, DAYS*/
    FROM DAY_COST_LFS;
END^
SET TERM ; ^
DAY_COST_LFS je GTT. Vkladám do nej 619 záznamov. Tabuľka Z_DAY_COST_LFS je prázdna aj keď vymenujem všetky polia. Netuším kde je chyba.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3560
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #1 kdy: 20-06-2018, 13:59:11 »
Moja chyba. Zablokoval som si funkciu. Po odblokovaní mi to tam vloží 191 890 záznamov.
Otázku mením: prečo tak veľa.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3560
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #2 kdy: 20-06-2018, 14:08:57 »
Už mi došlo prečo. Zakaždým sa tam vloží obsah celej tabuľky.
Ja tam potrebujem vložiť buď vždy len aktuálny riadok, alebo len raz celú tabuľku. Momentálne neviem ani jedno ani druhé.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3560
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #3 kdy: 20-06-2018, 14:15:54 »
Hm, vidím to na vloženie pomocného poľa do ktorého si budem ukladať hodnoty z generátora. A tá hodnota z generátora pôjde do podmienky.
To je nejaké krkolomné.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline KarelHorky

  • Plnoletý
  • ***
  • Příspěvků: 176
  • Karma: 8
    • Verze Delphi: 7, XE6
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #4 kdy: 20-06-2018, 14:16:45 »
Insert pro aktuální řádek uvnitř trigru uděláš s pomocí alias "new":

INSERT INTO Z_DAY_COST_LFS (FKLANDLORD_FLAT)
VALUES (new.FKLANDLORD_FLAT);

Nahraď si svůj insert za tento a ostatní sloupce si doplň podle potřeby.
KH.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3560
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #5 kdy: 20-06-2018, 14:20:32 »
Vďaka, už to ide ako má. Ja som ten new použil, ale v tom selecte :-[  Ide to aj bez vymenovania polí v časti INSERT INTO. Nerobím tým chybu?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2293
  • Karma: 123
    • Verze Delphi: D2007, XE3, DX10
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #6 kdy: 20-06-2018, 14:45:55 »
Vďaka, už to ide ako má. Ja som ten new použil, ale v tom selecte :-[  Ide to aj bez vymenovania polí v časti INSERT INTO. Nerobím tým chybu?
Nevim, jak je pravdepodobne, ze se ti zmeni fyzicke poradi sloupcu v GTT a te parove trvale tabulce. Pokud ano, bude odkaz * delat pic*viny. Ja to pri replikaci mezi ruznymi DB, kde jsem nechtel z duvodu silene udrzby v kazdem triggeru vypisovat pole, pouzil *, ale pak jsem musel setridit sloupce v DB. A beda, kdyz na to admin pri upgradu u zakaznika zapomel :-)

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 1281
  • Karma: 56
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #7 kdy: 20-06-2018, 14:48:43 »
Nevim, jak je pravdepodobne, ze se ti zmeni fyzicke poradi sloupcu v GTT a te parove trvale tabulce. Pokud ano, bude odkaz * delat pic*viny. Ja to pri replikaci mezi ruznymi DB, kde jsem nechtel z duvodu silene udrzby v kazdem triggeru vypisovat pole, pouzil *, ale pak jsem musel setridit sloupce v DB. A beda, kdyz na to admin pri upgradu u zakaznika zapomel :-)

Nejen to. Da se to vubec napsat? Neco jako:

Kód: MySQL [Vybrat]
  1. INSERT INTO MyTable
  2. SELECT new.*;
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Online vandrovnik

  • Guru
  • *****
  • Příspěvků: 501
  • Karma: 36
    • Verze Delphi: 10.2
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #8 kdy: 20-06-2018, 14:51:20 »
S tou hvězdičkou bych to vůbec nepokoušel - něco mi říká, že pokud by někdy použil nějaké počítané pole (COMPUTED BY...), tak to stejně nebude fungovat.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3560
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #9 kdy: 20-06-2018, 14:54:49 »
S tou hviezdičkou som to mal. A ako som písal vyššie, vždy mi to vložilo celú aktuálnu tabuľku. Výsledok bol 191 890 namiesto 619 záznamov.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online vandrovnik

  • Guru
  • *****
  • Příspěvků: 501
  • Karma: 36
    • Verze Delphi: 10.2
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #10 kdy: 20-06-2018, 14:55:55 »
S tou hviezdičkou som to mal. A ako som písal vyššie, vždy mi to vložilo celú aktuálnu tabuľku. Výsledok bol 191 890 namiesto 619 záznamov.

Za to nemohla hvězdička, ale to, že po insertu každého záznamu došlo ke zkopírování všech už dosud vložených záznamů :-)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3560
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #11 kdy: 20-06-2018, 14:56:44 »
Citace
Nevim, jak je pravdepodobne, ze se ti zmeni fyzicke poradi sloupcu v GTT a te parove trvale tabulce.
Toho som si vedomý. Ale či sa v budúcnosti bude niečo meniť, tak to netuším.
Asi to bude lepšie vymenovať.
« Poslední změna: 20-06-2018, 14:59:20 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3560
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #12 kdy: 20-06-2018, 14:58:26 »
Citace
Za to nemohla hvězdička, ale to, že po insertu každého záznamu došlo ke zkopírování všech už dosud vložených záznamů
Zjavne niektorí ľudia nečítajú celú tému ;)
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline KarelHorky

  • Plnoletý
  • ***
  • Příspěvků: 176
  • Karma: 8
    • Verze Delphi: 7, XE6
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #13 kdy: 20-06-2018, 15:22:42 »
Nějak se to rozjelo  :)
Určitě je lepší, když si sloupce vyjmenuješ, zejména když děláš insert. Tiše tolerovat hvězdičku se dá jen u selectu, když víš, že nikdy nikde nerušíš žádné sloupce.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2293
  • Karma: 123
    • Verze Delphi: D2007, XE3, DX10
Re:Trigget - After Insert -> INSERT INTO
« Odpověď #14 kdy: 20-06-2018, 16:06:46 »
Nejen to. Da se to vubec napsat? Neco jako:

Kód: MySQL [Vybrat]
  1. INSERT INTO MyTable
  2. SELECT new.*;
Nevim, Nemam cas ani chut to zkouset, ale pri replikaci mez DB jsem pouzival tohle, takze mozna ne, to bych asi new.* pouzil rovnou, ale mozna to bylo kvuli tomu, ze jsem chtel nechat probehnout vsechny ostatni trigger, kterych tam bylo pozahnane, ale HOSIP. Nejjednoduzsi je to vyzkouset.
Kód: SQL [Vybrat]
  1.       INSERT INTO ACCOUNT$
  2.         SELECT gen_id(G_ACCOUNT$,1) AS ID$, A.* FROM ACCOUNT A
  3.           WHERE A.ID=NEW.ID
  4.             returning ID$ INTO :SNAPSHOTID;
  5.  
« Poslední změna: 20-06-2018, 16:10:37 od pf1957 »

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: