Postgres pro szabvány dokumentáció 9

Ahelyett, hogy azonnal teljesíteni az egész kérést, akkor lehet állítani a kurzor, amely magában a lekérdezést, majd rá a lekérdezési eredmény egy pár sort egy időben. Ennek egyik oka, hogy erre az, hogy elkerüljük a memória túlcsordulás, ha az eredmény tartalmazza sok sort. (Users PL / pgSQL nem kell aggódni emiatt, mert e hurkok automatikusan használja a kurzor, hogy elkerüljék a memória problémák.) Egy érdekes lehetőség a használata a függvény egy hivatkozás egy kurzor, amely lehetővé teszi a hívó fél, hogy a query string. Ez egy hatékony módja annak, hogy nagy készletek sorok funkciókat.







(A kompatibilitás az Oracle, FOR lehet helyettesíteni IS.), Amely jelzi a léptetés kurzort lehet görgetni vissza. Ha NEM GÖRGETÉS visszatekerés nem engedélyezett. Ha semmi nincs megadva, a képesség, hogy lépjünk vissza függ a lekérdezés. Ha érvek vannak megadva. kell lenniük pár imyatip_dannyh. vesszővel elválasztva. Ezek párok határozzák nevek helyébe az értékeket a paraméterek ezt a kérést. A tényleges értékek helyére ezeket a neveket csak később, amikor megnyitja a kurzort.

Mindhárom változó refcursor típusú adatokat. Az első használható minden kérelmet, a második kapcsolódik (kötött), teljesen kialakult lekérdezést, és az utóbbi együtt jár egy olyan paraméterezett kérelmet. (Key helyébe egy egész paraméter értékét, amikor a kurzor nyitva van.) Mintegy változó curs1 azt mondják, hogy nem kötött (nem kötött), mivel nem kötődik semmilyen lekérdezés.

Mielőtt egy sort a kurzor, akkor legyen nyitva. (Ez egyenértékű azzal, SQL-parancs DECLARE kurzort.) A PL / pgSQL három formája van OPEN nyilatkozatot. amelyek közül kettőt használnak kötetlen kurzor változó, míg a harmadik kapcsolatos.

Megjegyzés: Bound kurzor változó használható a FOR ciklus anélkül, hogy kifejezetten megnyitása a kurzor, alpontban leírt 40.7.4.

40.7.2.1. OPEN FORzapros

Kurzor változó nyitva van, és kap egy külön végrehajtási kérelem. A mutató nem nyitott már, és a kurzor változó van kötve, hogy független (azaz csak refcursor változó típus). A kérelmet kell SELECT vagy bármely más parancs, ami visszaadja a szöveget (például magyarázat). A kérelem feldolgozása ugyanúgy, mint a többi SQL parancsok PL / pgSQL. változók neveit PL / pgSQL helyébe az értékek, a lekérdezési terv cache újrafelhasználásra. Behelyettesítve az értékek PL / pgSQL változók végzik a megnyitón a kurzor OPEN paranccsal. későbbi módosítására változók értékei nem befolyásolja a munkáját a kurzort. Görgetés Görgetés NO és ugyanazt jelentik, mint a kapcsolódó kurzort.

40.7.2.2. OPEN futtatási

Részben kurzor nyílik meg, és kap egy külön végrehajtási kérelem. A mutató nem nyitott már, és azt kell nyilvánítani egy kötetlen kurzor változó (azaz, mint egy változó refcursor). A kérés egy string kifejezés, ugyanúgy, mint a parancs végrehajtása. Mint általában, ez adja meg a rugalmasságot, hogy módosítsa a lekérdezési terv időről időre (lásd. Alszakasz 40.10.2). Ez azt is jelenti, hogy a helyettesítő változókat nem a parancssorban. Mint hajtani. paraméterértékek kerülnek be a dinamikus parancsot a formátum (), és használ. GÖRGETÉS és NO GÖRGETÉS paraméterek itt ugyanaz, mint a kötött kurzort.

Ebben a példában a lekérdezés szövegét behelyezzük a tábla nevét a következő formátumban (). Value képest col1. keresztül behelyezve paraméter segítségével. így nem kell mellékelni a idézőjelek.

Adáskor argumentum értékeket lehet használni vagy névleges Helyiérték. A Helyiérték, minden érv meghatározott sorrendben. A névleges jelölés az egyes argumentum neve elválasztjuk a kifejezést argumentum alkalmazásával: =. Ez hasonló ahhoz, hívja funkciók, mint a 4.3. Azt is hagyjuk keveredni helyzeti és elemzi jelöléssel.







Példák (itt kurzorok használata korábban bejelentett):

Mivel a kapcsolt mozog, ha a helyettesítő változókat, majd, sőt, két módja van, hogy át az értékeket a kurzort. Vagy használja explicit érveket OPEN. vagy burkoltan utalva változók PL / pgSQL a kérelmet. A kapcsolódó kurzor csak utalnak változókat volna nyilvánítani a kurzort. Mindenesetre, a változó értéke a helyettesítési kérelem kerül meghatározásra idején végrehajtás OPEN. Itt egy újabb módja annak, hogy ugyanezt az eredményt curs3. mint a fenti példában:

Ha a kurzor már megnyílt, akkor dolgozni vele a szereplők itt leírt.

Bízza a kurzor nem feltétlenül ugyanaz a funkciója, ahol megnyílt. A funkció visszatérési értéke típusú refcursor. amely lehetővé teszi a hívó fél, hogy folytassa a kurzort. (Inside refcursor string egy hagyományos név úgynevezett portál, amely az aktív kurzor lekérdezés. Lehetőség van továbbítja név, hozzá más változó refcursor típusa és így tovább, ahol a portál nem sérül).

Minden portálok hallgatólagosan végén lezárult a tranzakció. Ezért refcursor érték alkalmazható utal, hogy nyissa ki a kurzor csak a vége előtt a tranzakciót.

40.7.3.1. FETCH

FETCH beolvassa a következő sort a kurzort a cél. Mivel a cél lehet egy string változót, a változó típusa rekordot. vagy vesszővel elválasztott listáját egyszerű változók, mint a SELECT INTO. Ha a következő sor nincs jelen, a célponton NULL. Mivel a SELECT INTO. ellenőrizze, hogy a bejegyzés lehet beszerezni a speciális változó található.

Egy irányba érték bármilyen érvényes parancsot SQL-FETCH kiviteli alak, azzal az eltéréssel, hogy a visszanyert egynél több sor. Nevezetesen: NEXT. A technika. ELSŐ. LAST. ABSOLUTEchislo. RELATIVEchislo. Előre vagy hátra. Nincs jele irányba NEXT értéket. Értékek irányba. igénylő visszafelé halad, vezet a hiba, ha a kurzor nem nyilvánították, vagy nyitott megadásával tekercset.

kurzor egy változó típusú refcursor. amely utal a nyitott kurzor portálon.

40.7.3.2. MOVE

MOVE mozgatja a kurzort adatok visszakeresése nélkül. MOVE pontosan úgy működik, mint a lekérést. de csak mozgatja a kurzort, és nem távolítja el a vonal, amely mozgott. Mivel a SELECT INTO. ellenőrizze a sikeres lépés segítségével speciális változó található.

Itt az irányt bármilyen érvényes SQL-parancs BEHÍVÁSA lehetőség, nevezetesen: NEXT. A technika. ELSŐ. LAST. ABSOLUTEchislo. RELATIVEchislo. ALL. ELŐRE [szám | ALL] vagy hátra [szám | ALL]. Nincs jele irányba NEXT értéket. Értékek irányba. igénylő visszafelé halad, vezet a hiba, ha a kurzor nem nyilvánították, vagy nyitott megadásával tekercset.

40.7.3.3. UPDATE / DELETE HOL áram

Amikor a kurzor egy sorban az asztal, ez a vonal lehet változtatni, vagy eltávolítjuk a kurzor. Vannak korlátozások, milyen lehet egy kurzor lekérdezés (különösen ott kell lennie csoportok), és nagyon kívánatos használni jelzése FOR UPDATE. További információkért tekintse meg a DECLARE referencia oldal.

40.7.3.4. CLOSE

Bezárja portál társított a kurzor. Használt, hogy kiadja forrásokat korábban véget az ügylet, vagy felszabadítani a kurzor változó, hogy indítsák újra.

A kurzorok lehet tért vissza egy funkciót a PL / pgSQL. Ez akkor hasznos, amikor szükség van, hogy visszatérjen egy sor sorok és oszlopok, különösen, ha a minta nagyon nagy. Ebből a célból, a függvény megnyitja a kurzor, és visszatér a neve a hívó fél (vagy egyszerűen megnyitja a kurzort a megadott név a portál, bármilyen ismert módon, hogy a hívó fél). A hívó majd letölteni sort a kurzor. A kurzor lehet lezárni a hívó, vagy automatikusan bezáródik befejezésekor a tranzakciót.

A név a portál használt kurzor lehet a beruházó által meghatározott és automatikusan létrejön. Ahhoz, hogy adja meg a nevét a portál, egyszerűen rendelhet egy string változó refcursor megnyitása előtt. Refcursor karakterlánc változó értéke lehet használni, mint egy portál OPEN parancs nevét. Azonban, ha egy változó értéke REFCURSOR NULL, OPEN automatikusan létrehoz egy nevet, amely nem ütközik semmilyen meglévő portál, és hozzárendeli refcursor.

Megjegyzés: Bound kurzor változó kezdetben a karakterlánc érték, amely az a változó nevét is. Így a portál neve megegyezik a neve a kurzor változó, kivéve azokat az eseteket, amikor a fejlesztő újra nevet, rendelni egy új értéket megnyitása előtt a kurzort. Nincs korlátozás kurzor változó inicializálja a NULL és fogadására automatikusan generált egyedi nevet, hacsak nem írja felül.

A következő példa mutatja, az egyik módja annak, hogy át a kurzor nevét a hívó:

A következő példa az automatikus kurzor neve generáció:

A következő példa mutatja, az egyik módja annak, hogy visszatérjen több kurzorok egyetlen funkció:

Az egyik FOR ciklus opció lehetővé teszi, hogy rendezni a húr által visszaadott a kurzort. Itt a szintaxis:

Ez a változó-rekord automatikusan határozzák meg egy változó típusú rekord, és csak akkor áll fenn a cikluson belül (más deklarált változókat azonos nevű figyelmen kívül hagyja a ciklusban). Minden visszatért kurzor sorban egymás után rendelt a változó és a hurok test fut.