Dnes: 16. ledna 2018    | Registrace | Hledáme | Redakce | Info | Testy | Školení | Ocenění | Nápověda | Čtenář: nepřihlášen

Rychlé odkazy
  • Hlavní stránka
  • Seznam rubrik
  • Ankety
  • Editoriály
  • TOP 15
  • KONFERENCE 2008
  • KONFERENCE 2007
  • KONFERENCE 2006
  • KONFERENCE 2005
  • KONFERENCE 2004
  • Sborník
  • Testy
  • Virtuální školení
  • Personalizace


  • Hledáte práci?
    Hledáme redaktora - pojďte s námi tvořit Databázový svět!

    Vyhledávání

    Hledej
    na Databázovém světě!



    Rozšířené vyhledávání

    Rubriky
    Aktuality
    Bezpečnost
    Business
    Česká scéna
    Datové sklady
    Dokumentace
    Dotazovací jazyky
    Hardware
    Historie
    Komentáře
    Literatura
    Metodologie
    Nondb
    Open Source
    Poradna
    Produkty
    Případové studie
    Redakce
    Rozhovory
    Standardy
    Technologie
    Tipy - triky
    Tiskové zprávy
    Vývoj
    Vývojové nástroje
    Zajímavosti

    Co je to?
    Replikace
    Replikace slouží pro zajištění konzistentnosti dvou a více databází, nejčastěji pak o stejné struktuře v rámci distribuovaného zpracování. Vyspělé SŘBD replikace podporují, případně lze použít řešení třetích stran či replikační logiku zajistit vlastními postupy.

    Akce
    Dynamická Datová Centra
    - na semináři se seznámíte s komplexním řešením a koncepcí Dynamických Datových Center od Fujitsu Siemens Computers se speciálním důrazem na řešení FlexFrame.

    Textová inzerce
    IBPhoenix - Vše o InterBase a Firebirdu.

    Smějete se rádi? - Pak je pro vás Vtipník to pravé!

    Prodejce reklamy - Hledáme schopného prodejce reklamního prostoru, možnost i externí spolupráce.

    Přihlášený čtenář
    Nepřihlášený čtenář

    O portálu
    Databázový svět
    ISSN: 1213-5933

    Web je optimalizován pro rozlišení 1024x768, nicméně kromě větších rozlišení podporujeme i 800x600. Podrobnosti najdete zde.

    Chcete-li mít kdykoliv možnost zkontrolovat obsah našeho portálu, můžete využít podporu rss. Podrobnosti najdete zde.
    Tipy a triky pro Caché XXII. - Nová implementace dynamického SQL


    [Tipy - triky] - Kdysi dávno, ve druhém díle tohoto seriálu, jsme se věnovali tvorbě dotazů s použitím ručně psaného kódu bez SQL jazyka. V dnešním díle si naopak ukážeme, jakým způsobem se v Caché vyvíjely dotazy jako takové a seznámíme se s nejnovější implementací dynamických SQL dotazů.



    Již od prvopočátků Caché existovala v Caché možnost pracovat s příkazy SQL jazyka zapouzdřenými do makro kódu jazyka ObjectScript, tedy našeho nativního skriptovacího jazyka. Tento způsob práce se SQL je stále nejrychlejším při vykonávání dotazů, ale má tu nectnost, že SQL příkaz musí být sestaven již v okamžiku tvorby zdrojového kódu, tedy musí být „zadrátován“ natvrdo. Sice je možno předávat do a ze zapouzdřeného SQL parametry, ale pořád příkazy jako takové nelze za běhu měnit.

    Proto velmi brzy, současně s prvotní implementací objektů v Caché, byla vytvořena systémová třída %Library.ResultSet, která umožňovala definovat jak statické, do definic tříd zapouzdřené dotazy, a to pomocí SQL jazyka nebo (jak jsme viděli ve 2. díle našeho seriálu) i pomocí ObjectScriptu, tak i dynamické SQL dotazy.

    Postup byl a stále je jednoduchý. Vytvoříme instanci třídy %Libray.ResultSet a pseudokonstruktor - metodě %New() předáme řetězec, informující o tom, že budeme nadále pracovat nikoliv s předem definovaným dotazem, ale s dynamicky sestaveným. Třeba takto:

     
    SAMPLES:s rs=##class(%ResultSet).%New("%DynamicQuery:SQL")
    SAMPLES:s sc=rs.Prepare("select * from Sample.Person")
    SAMPLES:s sc=rs.Execute()
    SAMPLES:w rs.Next()
    1
    SAMPLES:w rs.Get("ID")
    1
    SAMPLES:w rs.Get("Name")
    Quince,Edward K.

    Pokud chceme předávat parametry za běhu programu, použijeme jednoduchou modifikaci výše uvedeného příkladu:

     
    SAMPLES:s rs=##class(%ResultSet).%New("%DynamicQuery:SQL")
    SAMPLES:s sc=rs.Prepare("select * from Sample.Person where ID>? And Name %STARTSWITH ?")
    SAMPLES:s sc=rs.Execute(10,"T")
    SAMPLES:w rs.Next()
    1
    SAMPLES:w rs.Get("ID")
    41
    SAMPLES:w rs.Get("Name")
    Tweed,Imelda D.

    Jednoduché, přehledné, ovšem nijak výrazně výkonné, stejně tak jako poměrně nepohodlné ve srování s prací s relačními databázemi či naopak s objekty. Právě se zřetelem na zvýšení výkonnosti dynamických dotazů byly vytvořeny nové třídy pro implementování dynamických SQL dotazů. Tyto třídy byly začleněny do balíčku %ResultSet. Zajímavé jsou zejména třídy %ResultSet.SQL, %ResultSet.Static a třídy používané ODBC a JDBC bránami. Výhodou tohoto novějšího API pro dynamické SQL příkazy je podpora kešování a statických snímků dat.

    Ve verzi Caché 2010.1 byla přidána třetí generace API pro dynamické SQL a to prostřednictvím balíčku %SQL. A o této nejnovější implementaci si povíme více podrobností.

    Nejdříve si shrňme základní přínosy této nejnovější implementace proti dřívějším:

    • Původní %Library.ResultSet podporoval předávání pouze omezeného počtu parametrů.
    • %ResultSet.SQL umožňoval pouze SQL SELECT příkaz.
    • Původní API neumožňovalo pracovat s vícenásobnými resultsety.
    • Větší rychlost vykonání kódu.
    • Resultset plně podporuje objekty, tedy je-li vráceným prvkem SQL SELECTu ukazatel na objekt (referenční atribut), je (volitelně) instalován a nadále se s ním pracuje plně objektově.
    • Nahrazuje jak třídy z balíčku %Library, tak %ResultSet a tvoří nové, jednotné rozhraní.

    Základní třídou pro práci s novým API je třída %SQL.Statement. Ta obsahuje několik metod pro práci:

    • %Prepare - Na základě předaného SQL řetězce připraví SQL příkaz, SQL řetězec může být předán také jako pole sestávající z více částí.
    • %PrepareClassQuery - Připraví SQL příkaz pro (SQL) dotazy pevně definované v jiných třídách.
    • %Execute - Vykoná SQL příkaz a vrátí sadu záznamů jako instanci %SQL.StatementResult.
    • %ExecDirect - Připraví a zároveň vykoná SQL příkaz, zpravidla se používá pro vykonání uložených procedur, výsledkem je %SQL.StatementResult.

    Další důležitou třídou je %SQL.StatementResult, popisující výsledek SQL operace.

    Použití výše uvedených tříd si ukážeme na jednoduchém příkladě:

     
    set statement=##class(%SQL.Statement).%New()
    set sql=3
    set sql(1)="select id,Name,DOB,Home_State"
    set sql(2)="from Sample.Person"
    set sql(3)= "where id?"
    set status=statement.%Prepare(.sql)
    set result=statement.%Execute(6)
    do result.%Display()	// pomocna metoda tridy %SQL.StatementResult pro zobrazeni vysledku
    id    Name                  DOB           Home_State
    7    Finn,George V.         03/23/1928    MA
    8    Hanson,James K.        04/02/1928    VT
    9    Klein,Michael X.       06/17/1923    WV
    10   Klingman,Brenda U.     07/09/1924    WA
    11   Paladino,Rhonda H.     06/29/1923    AR
    12    Vonnegut,Nellie K.    03/24/1926    HI
    … atd…

    Komplikovanější ukázku naleznete v názvovém prostoru SAMPLES, jedná se o třídu Sample.ResultSets, jenž je součástí výchozí instalace Caché od verze 2010.1. Malá douška na závěr: %SQL.StatementResult je praktickým představitelem tříd poskytujících dynamické odbavení, jak o něm bylo psáno v minulém díle tohoto seriálu. Snadno si to můžeme demonstrovat na jednoduchém příkladě, opět nad daty v názvovém prostoru SAMPLES

     
    set statement=##class(%SQL.Statement).%New()
    set statement.%ObjectSelectMode=1
    set sql= "select Title, Name, Company from Sample.Employee"
    set status=statement.%Prepare(.sql)
    set result=statement.%Execute()
    do result.%Next(.status)	// posun na prvni zaznam
    write !,result.Company.Name	// pozor na mala a velka pismena
    
    YoyoSonics Partners
    

    Pozn: Udělejte si malou MAC rutinu a z ní výše uvedený příklad spusťte místo provádění jednotlivých příkazů z příkazové řádky.

    Související články:
    Tipy a triky pro Caché XXI. - Dynamické odbavení vlastností a metod tříd (08.11.2010)
    Tipy a triky pro Caché XX. - Práce s třídou %Installer (01.11.2010)
    Tipy a triky pro Caché XIX. - Využití uživatelské projekce (25.10.2010)
    Tipy a triky pro Caché XVIII. - Testování kódu (11.10.2010)
    Tipy a triky pro Caché XVII. – try - catch (04.10.2010)
    Tipy a triky pro Caché XVI. – kdy a proč používat třídu System.Eents? (02.10.2006)
    Tipy a triky pro Caché XV. – jak na chybové stavy? (31.07.2006)
    Tipy a triky pro Caché XIV. – jak na grafiku s XML transformací? (13.07.2006)
    Tipy a triky pro Caché XIII. – jak na izolaci objektů v CSP? (06.04.2006)
    Tipy a triky pro Caché XII. – jak na Caché Server Rules? (09.03.2006)
    Tipy a triky pro Caché XI. – definování virtuálních CSP serverů (09.02.2006)
    Tipy a triky pro Caché X. – vlastní vyhledávání (23.01.2006)
    Tipy a triky pro Caché IX. – komunikace mezi procesy podruhé (16.01.2006)
    Tipy a triky pro Caché VIII. – komunikace mezi procesy poprvé (09.01.2006)
    Tipy a triky pro Caché VII. – Java Server Pages a Caché (02.01.2006)
    Tipy a triky pro Caché VI. – psaní kódu v .NET pomocí COM třídy Factory (14.11.2005)
    Tipy a triky pro Caché V. – jak na ladění CSP stránek? (05.10.2005)
    Tipy a triky pro Caché IV. – jak na neznámý počet parametrů? (19.08.2005)
    Tipy a triky pro Caché III. – casting objektů (19.07.2005)
    Tipy a triky pro Caché II. – dotazy bez SQL (18.05.2005)
    Tipy a triky pro Caché I. - izolace (05.05.2005)

    ( Celý článek! | Autor: Daniel Kutáč | Počet komentářů: 0 | Přidat komentář | Informační e-mailVytisknout článek )

    Vyhledávání
     

    Anketa
    Kolik ročně utratíte za dovolené?

    Nic 
     (1546 hl.)
    Do 1 000,- Kč 
     (1065 hl.)
    Do 10 000,- Kč 
     (997 hl.)
    Do 25 000,- Kč 
     (1375 hl.)
    Do 50 000,- Kč 
     (1015 hl.)
    Do 75 000,- Kč 
     (1177 hl.)
    Více než 75 000,- Kč 
     (1015 hl.)

    Celkem hlasovalo: 8190


    Poslední komentáře
    frontierd@126.com
    frontierd@126.com
    frontierd@126.com
    c
    http://www.coachoutl

    Newsletter
    Přihlaste si nezávazně - i bez registrace - odběr informačního newsletteru. Podrobné informace najdete zde.

    Emailová adresa:


    Kalendář
    <<  Leden  >>
    PoÚtStČtSoNe
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    

    Redakci připojuje


    Nejčtenější

    Databáze je prázdná!


    Nejvíce komentářů

    Databáze je prázdná!


    Reklama






    Nenechte si ujít články na dalších webech




    Na této stránce použité názvy programových produktů, firem apod. mohou být ochrannými známkami
    nebo registrovanými ochrannými známkami příslušných vlastníků.

    Databázový svět | dfKlub - digitální fotografie | Vtipník - vtipy přímo k Vám | Reminder - přestaňte zapomínat | Databázový svět

    Copyright (c) 2004 AVRE Publishing, spol. s r.o. Všechna práva vyhrazena