Dočasná tabuľka - ako ju riešiť?

Autor Téma: Dočasná tabuľka - ako ju riešiť?  (Přečteno 1114 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3405
  • Karma: 35
    • Verze Delphi: XE7 professional
Dočasná tabuľka - ako ju riešiť?
« kdy: 10-04-2018, 09:19:22 »
  • Definovať ju v DB ako trvalú. Pred použitím vymazať obsah, po použití tak isto
  • Pred použitím ju definovať/vytvoriť v DB. Po použití zlikvidovať. Neviem čo to urobí s DB. Či nebude zbytočne narastať
  • Iný spôsob?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 1060
  • Karma: 52
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Dočasná tabuľka - ako ju riešiť?
« Odpověď #1 kdy: 10-04-2018, 09:35:33 »
Excellent
Rated 1 time
Moc moznosti ve FB nemas. Podle vseho mas k dispozici jen Global Temporary Tables. Jejich definice jsou perzistentni, tzn. ze je vytvoris a v databazi zustanou. Neni duvod je vsak mazat (tedy pokud jejich pouziti neni napr. jednorazova akce, kdy by tabulka sama o sobe v databazi prebyvala). Jejich obsah se da ovlivnit ON COMMIT syntaxi:

- ON COMMIT DELETE ROWS - vsechny zaznamy tabulky v ramci connection session by se mely smazat po commitu transakce
- ON COMMIT PRESERVE ROWS - vsechny zaznamy tabulky v ramci connection session by se mely smazat po odpojeni connection
« Poslední změna: 10-04-2018, 10:04:05 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2165
  • Karma: 116
    • Verze Delphi: D2007, XE3, DX10
Re:Dočasná tabuľka - ako ju riešiť?
« Odpověď #2 kdy: 10-04-2018, 09:43:41 »
Excellent
Rated 1 time
   
  • Iný spôsob?
Jak pise Delphin: na mezivysledky jsem pouzival u FB
Kód: SQL [Vybrat]
  1. CREATE GLOBAL TEMPORARY TABLE xxx (...) ON COMMIT DELETE ROWS
  2.  

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3405
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Dočasná tabuľka - ako ju riešiť?
« Odpověď #3 kdy: 10-04-2018, 10:03:23 »
Ja som si myslel, že z otázky vyplýva skutočnosť, že sa jedná o jednorázovú udalosť. Výpočet vyúčtovania raz ročne.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 1060
  • Karma: 52
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Dočasná tabuľka - ako ju riešiť?
« Odpověď #4 kdy: 10-04-2018, 10:05:33 »
Excellent
Rated 1 time
Ja som si myslel, že z otázky vyplýva skutočnosť, že sa jedná o jednorázovú udalosť. Výpočet vyúčtovania raz ročne.

Nevyplyva. Nicmene jednou rocne neni jednorazova akce ;) Leda ze bys v blizke dobe cekal armagedon. Tabulku bych nadefinoval a nechal ji zit. Ulozena totiz zustane jen jeji definice. Data se smazou nejpozdeji po odpojeni connection dane session.
« Poslední změna: 10-04-2018, 10:08:02 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3405
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Dočasná tabuľka - ako ju riešiť?
« Odpověď #5 kdy: 10-04-2018, 10:46:51 »
Citace
Nevyplyva. Nicmene jednou rocne neni jednorazova akce
Tiež je pravda, že užívateľ spustí výpočet opakovane. Vždy bude buď odstraňovať chyby v údajoch, alebo budú nejaké vyžadované korekcie.
Citace
Tabulku bych nadefinoval a nechal ji zit.
Tak som to robil doteraz. Zdá sa mi to najprirodzenejšie/najlogickejšie.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3405
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Dočasná tabuľka - ako ju riešiť?
« Odpověď #6 kdy: 10-04-2018, 13:00:26 »
Ako mám chápať túto vetu: "GTTs and regular tables cannot reference one another". Nechytám sa.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Hrdina
  • ****
  • Příspěvků: 447
  • Karma: 36
    • Verze Delphi: 10.2
Re:Dočasná tabuľka - ako ju riešiť?
« Odpověď #7 kdy: 10-04-2018, 13:45:16 »
Ako mám chápať túto vetu: "GTTs and regular tables cannot reference one another". Nechytám sa.

Asi že není možné mezi GTT a normální tabulkou udělat foreign key?

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2165
  • Karma: 116
    • Verze Delphi: D2007, XE3, DX10
Re:Dočasná tabuľka - ako ju riešiť?
« Odpověď #8 kdy: 10-04-2018, 14:07:06 »
Asi že není možné mezi GTT a normální tabulkou udělat foreign key?
Ano. odkazovat se muzes tr. muzes si tam dat pole IDxxx, ktere ukazuje na PK v jine tabulce a pouzivat to v joinech, ale  bez kontroly referencni integrity.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3405
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Dočasná tabuľka - ako ju riešiť?
« Odpověď #9 kdy: 15-04-2018, 10:38:48 »
Citace
Jejich obsah se da ovlivnit ON COMMIT syntaxi:
- ON COMMIT DELETE ROWS - vsechny zaznamy tabulky v ramci connection session by se mely smazat po commitu transakce
Ak to dobre chápem, tak vyvolám
Kód: [Vybrat]
  FqryUI.Transaction.StartTransaction;
  try
    FqryUI.ExecSQL;
ale nesmiem zavolať Commit. Lebo si vyprázdnim tabuľku.
Tak to si musím pre túto úlohu vytvoriť samostatnú transakciu. Aby sa mi to nebilo s ostatnými.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 1060
  • Karma: 52
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Dočasná tabuľka - ako ju riešiť?
« Odpověď #10 kdy: 15-04-2018, 11:07:55 »
Citace
Jejich obsah se da ovlivnit ON COMMIT syntaxi:
- ON COMMIT DELETE ROWS - vsechny zaznamy tabulky v ramci connection session by se mely smazat po commitu transakce
Ak to dobre chápem, tak vyvolám
Kód: [Vybrat]
  FqryUI.Transaction.StartTransaction;
  try
    FqryUI.ExecSQL;
ale nesmiem zavolať Commit. Lebo si vyprázdnim tabuľku.
Tak to si musím pre túto úlohu vytvoriť samostatnú transakciu. Aby sa mi to nebilo s ostatnými.

Tim commitem se v kontextu ON COMMIT DELETE ROWS mysli obecne prikaz konkretni transakci. Coz je krome Commit i Rollback, CommitRetaining a RollbackRetaining (a pravdepodobne i vsechny kombinace primo spoustenych transakcnich SQL prikazu).
« Poslední změna: 15-04-2018, 11:09:46 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3405
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Dočasná tabuľka - ako ju riešiť?
« Odpověď #11 kdy: 15-04-2018, 11:21:43 »
Tak som to myslel, len zjednodušene napísal. Takže samostatná transakcia.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 1060
  • Karma: 52
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Dočasná tabuľka - ako ju riešiť?
« Odpověď #12 kdy: 15-04-2018, 11:46:12 »
Tak som to myslel, len zjednodušene napísal. Takže samostatná transakcia.

Ano. A nejen to, v ramci te samostatne transakce nesmis provest dokonce ani "soft" commit (CommitRetaining a RollbackRetaining), kde bych napr. osobne cekal ze ty data GTT definovane s ON COMMIT DELETE ROWS preziji.
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3405
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Dočasná tabuľka - ako ju riešiť?
« Odpověď #13 kdy: 18-04-2018, 21:24:01 »
Hm, mám problém. Uložím si do GTT údaje. Ale DB manažér ukáže prázdnu tabuľku. Neviem či to tak má byť. Ale nezdá sa mi to. Konečný výsledok je tiež prázdny dataset. Transakciu nemám ukončenú.
Mám overené, že INSERT INTO MYTABLE SELECT ... posiela 10 záznamov.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 1060
  • Karma: 52
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Dočasná tabuľka - ako ju riešiť?
« Odpověď #14 kdy: 18-04-2018, 21:25:10 »
Hm, mám problém. Uložím si do GTT údaje. Ale DB manažér ukáže prázdnu tabuľku. Neviem či to tak má byť.

Ano, ma to tak byt protoze jde o jinou connection session. Co GTT sdili globalne je jen schema. Data jsou pak v ramci instance daneho pripojeni nebo zivota konkretni transakce instance daneho pripojeni. A protoze pouziva Tvuj DB manazer jinou instanci pripojeni nez Tva aplikace, nemuze data videt (a naopak).
« Poslední změna: 18-04-2018, 21:30:47 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

 

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: