Ez a szekció csak TMP3-mas módban működik. Igazából egy előfeldolgozó átkonvertálja összefüggésekké, szűréssé, mező és adabázis definiciókká.
Szerepelhet több SQL szekció is egy listában, de a feldolgozás szekciónként fog lefutni.
Két megadási lehetőség van, a kettő keveréke nem igazán szerencsés, bár használható.
Sql script megadása
SQL=Szabványos sql scipt
[SQL=Szabványos sql scipt folytatás]...
Ebben az esetben az előfeldolgozó két lépcsőben dolgozik, először szétszedi a megadott scipt-et a másik módnál leírt elemekre, majd végrehajtja azok konvertálását.
Csak ebben az esetben van lehetőség beágyazott SELECT használatára, ez esetben a Hívás szekcióba készül egy bejegyzés, és átadja a zárójelben révő script részt amelybe előzőleg behelyettesíti a feloldható hivatkozásokat. (Input és adatbázis mezők neve helyére az értékeket.)
|
Sql elemek megadása
Ebben az esetben az előfeldogozó számára közvetlenül emészthető formában kell megadni az sql lekérdezés elemeit.
A sorhossz korlátozottsága miatt több azonos kulcsú sor is megadható. Ezeket a sorokat feldolgozás előtt szimlán egymás után fűzi a program.
Select
Select=[*][Kifejezés [Alias][,Kifejezés]] FROM Adabázisnév;IndexNum [Alias]
Az állnevekhez a nem használom az AS előtagot, szimlán szóközzel kell elválasztani.
Az adatbázisnevet az AdatDB szekcióba fogja bekonvertálni. Ha van megadva hozzá alias, azt is felveszi.
A kifejezést megpróbálja tokenizálni, és ha talál benne olyan mezőnevet, ami nem Adatbázisnév.Mezőnév formátumú, akkor felvesz egy aliast, aminek értéke a teljes adatbázis hivatkozás lesz. Ha *-ot ad meg az ember, akkor nem hoz létre aliasokat, azaz a mezőkre csak Adatbázisnév.Mezőnév formában lehet hivatkozni.
Ha van megadva a kifejezésre alias, akkor felveszi azt is.
A Kifejezésből az Adat szekcióban generál mezőt, ha nincs külön megadva. A mező neve és cimkéje a kifejezés vagy álnév lesz.
Ha talál olyan mezőt, aminek a neve azonos a kifejezéssel vagy alias-al, akkor nem hoz létre újat, de felülírja az adahivatkozását és az összegzési módját. Igy lehet a mezőket formázni.
Pl.:
Select=* FROM CikkTörzs
Select=CikkSzám,Váltószám FROM CikkTömeg
|
Fügvények a kifejezésben:
Csak ORDER BY-al együtt működnek helyesen.
AVG (Kifejezés) : átlag
COUNT (Kifejezés) : nem üres elemek száma
COUNT (*) : sorok száma üres is
MAX (Kifejezés) : maximális elem
MIN (Kifejezés) : minimális elem
SUM (Kifejezés) : összeg
Ezek a fügvények a létrehozott adatmezőnek a TMPÖssz tulajdonságát állítják be a fügvénynek megfelelőre.
Az adathivatkozás a kifejezés értéke lesz, illetve Count-nál "1", a COUNT (Kifejezés) esetén a kifejezés az adatfeltételhez kerül.
A feldolgozás során a mezők TMPÖssz tulajdonságuknak megfelelően összegződnek.
Az AVG különleges annyiban, hogy három mezőt hoz létre, egy Sum(Kifejezés)-t, egy Count(Kifejezés)-t, ezeket nulla hosszal és AVG_xxx névvel, és egy AVG(Kifejezés) nevűt, TMP2Mód=Nem beállítással, ami nyomtatáskor számolja ki az átlagot.
|
|
Where
Where=Kifejezés[=][<][>][#][<=][>=]Kifejezés[OR][AND]
A szűrés szekcióba fogja bekonvertálni a megadott feltételt.
Ha az egyik oldal adatbázismező, a másik pedig csak konstans és input hivatkozást tartalmaz, akkor normál szűrésként, különben adatbázisfeltételként kerül be a feldolgozásba, azaz csak akkor veszi fel a tmp2-es rekordot, ha a megadott feltétel teljesül.
|
LeftJoin
LeftJoin=CsatoltDBNév;IndexNum [alias] ON [Adatbázisnév.]AdatMező1=[Adatbázisnév.]Adatmező2 [AND AdatMező21=CsatoltAdatmező22]
Az adatmezők felírása megfordítható, felírásuknál az adatbázisnév elhegyható, ha a mezőnév egyértelműen azonosítja.
A csatolt db-ket nem kell külön a FROM részben megadni.
Az összefüggésekhez konvertálja be a kapcsolatot, 4-es (Tmp készítéskor) flag-gel.
|
InnerJoin
InnerJoin=[Adabázisnév1 Adatbázisnév2 ON ]AdatMező1=Adatmező2 [OR]
InnerJoin=Adatbázis1.Mező1=AdatBázis2.Mező2 [OR]
Mint az előző, de az adatbázisfeltételhez bejegyzi a "csatolt tábla nem üres" feltételt.
|
OrderBy
OrderBy=[Adatbázisnév.]Mezőnév[,[Adatbázisnév.]Mezőnév]
A megdott mezőket ha még nincsennek meg felveszi adatmezőként AdatHossz=0-val, és beállítja a Rendezés=Igen tulajdonságot.
|
GroupBy
GroupBy=[Adatbázisnév.]Mezőnév[,[Adatbázisnév.]Mezőnév] [HAVING csoport_feltétel]
A megdott mezőket ha még nincsennek meg felveszi adatmezőként AdatHossz=0-val, és beállítja a Rendezés=Igen tulajdonságot, és bekapcsolja a TMP2-es összegzést, ami a mezők TMPÖssz tulajdonságban megadott művetet hajtja végre minden olyan rekordra, amiben az itt felsorolt mezők azonosak.
A HAVING utófeldolgozáshoz konvertálódik be, Nyomtatási sorfeltételként.
|
|
Az adatmező és fejlécdefiníciók ugyan úgy használhatóak, mint TMP2-es módban, az előfeldolgozó akkor fogja az általunk definiált adatmezőt használni, ha annak a neve azonos az adatmező nevével, vagy az sql-ben megadott Alias-al, de az előfeldolgozó által felvett mezők az Group by és Order by sorrendben kerülnek hozzáadásra, azaz ha az ötödik mezőt kell formázni, fel kell venni hozzá az előző négyet is, különben a rendezési sorrend nem az sql-ben megadott lesz.
Lehet használni ezt a szekciót úgy is, hogy az adatmezőket hagyományos módon definiáljuk, ez esetben az sql-ben nem kell felsorolni a mezőket, és a Rendezés tulajdonságukat beállítva az Order by is elhagyható. A Group by-t viszont még ha üres értékkel is de be kell írni, hogy az összegzés aktiválódjon.
Lehet szűrést, és összefüggéseket is definiálni a hagyományos módon, de az összefüggések kiértékelése a TMP3-mas módnak megfelelően történik.
Az sql script-ben a kifejezésekben ugyan olyan hivatkozások és fügyvények használhatóak, mint TMP2-es módban, az adathivatkozásokban.