Autor Téma: Dokaze Firebird 3 vratit z ulozene procedury resultset dle schema tabulky?  (Přečteno 307 krát)

Offline Delfin

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 9
    • Verze Delphi: 2009, Tokyo
Neumi. Dotaz beru z5. Prosim o smazani dotazu...
« Poslední změna: 24-08-2017, 02:37:09 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2872
  • Karma: 27
    • Verze Delphi: XE7 professional
Nech ostane. Zas som sa niečo naučil ;)
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 9
    • Verze Delphi: 2009, Tokyo
Nech ostane. Zas som sa niečo naučil ;)

Ja se snazim vyrobit schema toho registru vlastniku (by oko) a zkousel jsem zda Firebird umi to cim je v PostgreSQL:

Kód: MySQL [Vybrat]
  1. CREATE FUNCTION MyProc (InputValue int) RETURNS SETOF MyTable AS $$
  2.     SELECT * FROM MyTable WHERE MyField = InputValue;

Firebird (tady, alespon jsem nic podobneho v bajecnem online helpu nenasel, je treba specifikovat jednotlive sloupce pokud chci vratit resultset tabulky):

Kód: MySQL [Vybrat]
  1. CREATE PROCEDURE MyProc (InputValue int) RETURNS (MyField1 INT NOT NULL, MyField2 INT NOT NULL,...) AS
  2.   FOR SELECT MyField1, MyField2 FROM MyTable WHERE MyField = :InputValue INTO :MyField1, :MyField1
  3.   DO
  4.     SUSPEND;
  5.   END

Pokud se pletu a je to mozne, opravte me prosim. Workaround je v pripade na ktery jsem narazil snadny (pracuje se tam s temporary tabulkama, takze neni nutne vracet resultset).

Podle me mel byt Firebird pohrben v mrazu nekde na Sibiri :) Omlouvam se priznivcum vychodnich technologii a obecne jeho fandum, ale kdyz srovnam co nabizi za stejny peniz pro "stredne" velke aplikace napr. PostgreSQL, pak je Firebird jen detskou hrackou, a to betonovym vlackem s navodem "jezdete s tim po zemi, pouzit muzete koberec nize specifikovanych barev". Nic bych proti nemu nemel, ale za "konkurenci" kulha, a to dost (ale abych zkritizoval i Postgres, co ted provedli ubohemu pgAdminu z uzivatelskeho pohledu je hrozive).
« Poslední změna: 24-08-2017, 11:39:06 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1796
  • Karma: 77
    • Verze Delphi: D2007, XE3, DX10
Excellent
Rated 1 time
Firebird (tady, alespon jsem nic podobneho v bajecnem online helpu nenasel, je treba specifikovat jednotlive sloupce pokud chci vratit resultset tabulky):
Nebo si nejdriv sahnout pro meta data a na zaklade nich tu SP vytvorit i s tim result setem. Kdyz jsem se hrabal v metadatech, tak jsem vychazel z popisu http://www.alberton.info/firebird_sql_meta_info.html#.WZ8POdFLdaQ

Offline Delfin

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 9
    • Verze Delphi: 2009, Tokyo
Firebird (tady, alespon jsem nic podobneho v bajecnem online helpu nenasel, je treba specifikovat jednotlive sloupce pokud chci vratit resultset tabulky):
Nebo si nejdriv sahnout pro meta data a na zaklade nich tu SP vytvorit i s tim result setem. Kdyz jsem se hrabal v metadatech, tak jsem vychazel z popisu http://www.alberton.info/firebird_sql_meta_info.html#.WZ8POdFLdaQ

Diky! To je to k cemu se nejspis uchylim, ale ne pro parametry procky ale pro slozeni dotazu k tvorbe vne pouzite temporary tabulky. Firebird, tramtadada, neumi ani CREATE TABLE AS. Ja tenhle DBMS fakt nemam rad ::) :) Oboji umi uz i ten kyblik neceho hnedeho MySQL. Ostuda, proste ostuda.
« Poslední změna: 24-08-2017, 20:28:22 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline vandrovnik

  • Hrdina
  • ****
  • Příspěvků: 253
  • Karma: 5
    • Verze Delphi: 10.2

Ja se snazim vyrobit schema toho registru vlastniku (by oko) a zkousel jsem zda Firebird umi to cim je v PostgreSQL:

Kód: MySQL [Vybrat]
  1. CREATE FUNCTION MyProc (InputValue int) RETURNS SETOF MyTable AS $$
  2.     SELECT * FROM MyTable WHERE MyField = InputValue;


Používám Firebird už celkem dlouho, a zrovna tohle mi tedy nikdy nechybělo. V proceduře pracuju jen s těmi poli, která v tu chvíli potřebuju třeba kvůli výpočtům nebo filtrování, a když z původní tabulky potřebuju ještě nějaká další (případně pokaždé jiná), tak si je připojím přes JOIN...

Offline Delfin

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 9
    • Verze Delphi: 2009, Tokyo

Ja se snazim vyrobit schema toho registru vlastniku (by oko) a zkousel jsem zda Firebird umi to cim je v PostgreSQL:

Kód: MySQL [Vybrat]
  1. CREATE FUNCTION MyProc (InputValue int) RETURNS SETOF MyTable AS $$
  2.     SELECT * FROM MyTable WHERE MyField = InputValue;


Používám Firebird už celkem dlouho, a zrovna tohle mi tedy nikdy nechybělo. V proceduře pracuju jen s těmi poli, která v tu chvíli potřebuju třeba kvůli výpočtům nebo filtrování, a když z původní tabulky potřebuju ještě nějaká další (případně pokaždé jiná), tak si je připojím přes JOIN...

To chapu. Ja se snazil vyrobit procky, do kterych bude mozne poslat referenci na resultset tabulky a resultset jine z ni dostat. Workaround je nastesti pomerne snadny, globalni session temporary tabulky.
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1796
  • Karma: 77
    • Verze Delphi: D2007, XE3, DX10
Používám Firebird už celkem dlouho, a zrovna tohle mi tedy nikdy nechybělo. V proceduře pracuju jen s těmi poli, která v tu chvíli potřebuju třeba kvůli výpočtům nebo filtrování, a když z původní tabulky potřebuju ještě nějaká další (případně pokaždé jiná), tak si je připojím přes JOIN...
Protoze pouzivas DB normalnim zpusobem a pravdepodobne se vyhybas nebezpecnym konstrukcim jako select * ...
 
Me by se neco takoveho hodilo jen jednou, kdyz jsem delal replikaci dat mezi lokalnimi a centralni DB ve Firebirdu. To jsem v triggerech nepohrdnul ani tim select *

Hestli to spravne chapu, tak D. se snazi o alternativni praci persistentnim ulozistem dat v relavni DB, rizenou data bindingem, a ne SQL prikazy

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2872
  • Karma: 27
    • Verze Delphi: XE7 professional
Chce to využiť v MVC na automatické generovanie SQL textov a natiahnutie údajov do modelu. Aspoň to tak chápem.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Plnoletý
  • ***
  • Příspěvků: 229
  • Karma: 9
    • Verze Delphi: 2009, Tokyo
vyhybas nebezpecnym konstrukcim jako select * ...

Ale ja nejsem zastancem SELECT * (to co jsem poslal je jen pro ukazku parametru procky). Ja proste nechapu proc mam vyjmenovavat jak blbec to co muze DMBS jednoduse zjistit z metadat (i kdybych pouzil SELECT *, btw.) kdybych to Firebirdu v parametrech naznacil.

Chce to využiť v MVC na automatické generovanie SQL textov a natiahnutie údajov do modelu. Aspoň to tak chápem.

Ja si chtel jen usnadnit praci. Je to jen pro nakrmeni modelu (vice nez jeden, pro kazdou z tabulek separatni) pro sestaveni toho navigacniho stromu (nakonec jsem implementoval bod 1).
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

 

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

Jméno: E-mail:
Ověření:
Kolik je šest plus čtyři (slovem):