FETCH
FETCH â полÑÑиÑÑ ÑезÑлÑÑÐ°Ñ Ð·Ð°Ð¿ÑоÑа ÑеÑез кÑÑÑоÑ
СинÑакÑиÑ
FETCH [напÑавление] [ FROM | IN ]имÑ_кÑÑÑоÑаÐдеÑÑ Ð´Ð¾Ð¿ÑÑкаеÑÑÑнапÑавление: NEXT PRIOR FIRST LAST ABSOLUTEÑиÑлоRELATIVEÑиÑлоÑиÑлоALL FORWARD FORWARDÑиÑлоFORWARD ALL BACKWARD BACKWARDÑиÑлоBACKWARD ALL
ÐпиÑание
FETCH полÑÑÐ°ÐµÑ ÑÑÑоки ÑеÑез Ñанее ÑозданнÑй кÑÑÑоÑ.
ÐÑÑÑÐ¾Ñ ÑвÑзан Ñ Ð¾Ð¿ÑеделÑннÑм положением, ÑÑо и иÑполÑзÑÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° FETCH. ÐÑÑÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ ÑаÑполагаÑÑÑÑ Ð¿ÐµÑед пеÑвой ÑÑÑокой ÑезÑлÑÑаÑа запÑоÑа, на лÑбой ÑÑÑоке ÑÑого ÑезÑлÑÑаÑа, либо поÑле поÑледней ÑÑÑоки. ÐÑи Ñоздании кÑÑÑÐ¾Ñ Ð¾ÐºÐ°Ð·ÑваеÑÑÑ Ð¿ÐµÑед пеÑвой ÑÑÑокой. Ðогда FETCH доÑ
Ð¾Ð´Ð¸Ñ Ð´Ð¾ конÑа набоÑа ÑÑÑок, кÑÑÑÐ¾Ñ Ð¾ÑÑаÑÑÑÑ Ð² положении поÑле поÑледней ÑÑÑоки, либо пеÑед пеÑвой, пÑи движении назад. ÐоÑле команд FETCH ALL и FETCH BACKWARD ALL кÑÑÑÐ¾Ñ Ð²Ñегда оказÑваеÑÑÑ Ð¿Ð¾Ñле поÑледней ÑÑÑоки или пеÑед пеÑвой, ÑооÑвеÑÑÑвенно.
ФоÑÐ¼Ñ NEXT, PRIOR, FIRST, LAST, ABSOLUTE и RELATIVE вÑбиÑаÑÑ Ð¾Ð´Ð½Ñ ÑÑÑÐ¾ÐºÑ Ð¿Ð¾Ñле ÑооÑвеÑÑÑвÑÑего пеÑемеÑÐµÐ½Ð¸Ñ ÐºÑÑÑоÑа. ÐÑли в ÑÑом положении ÑÑÑоки не оказÑваеÑÑÑ, возвÑаÑаеÑÑÑ Ð¿ÑÑÑой ÑезÑлÑÑаÑ, а кÑÑÑÐ¾Ñ Ð¾ÑÑаÑÑÑÑ Ð² доÑÑигнÑÑом положении пеÑед пеÑвой ÑÑÑокой или поÑле поÑледней.
ФоÑÐ¼Ñ FORWARD и BACKWARD полÑÑаÑÑ Ñказанное ÑиÑло ÑÑÑок, ÑдвигаÑÑÑ ÑооÑвеÑÑÑвенно впеÑÑд или назад; в ÑезÑлÑÑаÑе кÑÑÑÐ¾Ñ Ð¾ÐºÐ°Ð·ÑваеÑÑÑ Ð½Ð° поÑледней вÑданной ÑÑÑоке (или пеÑед/поÑле вÑеÑ
ÑÑÑок, еÑли ÑиÑло пÑевÑÑÐ°ÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво доÑÑÑпнÑÑ
ÑÑÑок).
ФоÑÐ¼Ñ RELATIVE 0, FORWARD 0 и BACKWARD 0 дейÑÑвÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾ â они ÑÑиÑÑваÑÑ ÑекÑÑÑÑ ÑÑÑокÑ, не пеÑемеÑÐ°Ñ ÐºÑÑÑоÑ, Ñо еÑÑÑ, повÑоÑно вÑбиÑÐ°Ñ ÑÑÑокÑ, вÑбÑаннÑÑ Ð¿Ð¾Ñледней. ÐÑа опеÑаÑÐ¸Ñ Ð±ÑÐ´ÐµÑ ÑÑпеÑна, ÑолÑко еÑли кÑÑÑÐ¾Ñ Ð½Ðµ ÑаÑположен до пеÑвой или поÑле поÑледней ÑÑÑоки; в ÑÑом ÑлÑÑае ÑÑÑока возвÑаÑена не бÑдеÑ.
ÐÑимеÑание
Ðа ÑÑой ÑÑÑаниÑе опиÑÑваеÑÑÑ Ð¿Ñименение кÑÑÑоÑов на ÑÑовне команд SQL. ÐÑли Ð²Ñ Ð¿Ð¾Ð¿ÑÑаеÑеÑÑ Ð¸ÑполÑзоваÑÑ ÐºÑÑÑоÑÑ Ð²Ð½ÑÑÑи ÑÑнкÑии PL/pgSQL, пÑавила бÑдÑÑ Ð´ÑÑгими â Ñм. ÐодÑаздел 42.7.3.
ÐаÑамеÑÑÑ
напÑавлениеÐаÑамеÑÑ
напÑавлениезадаÑÑ Ð½Ð°Ð¿Ñавление Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¸ ÑиÑло вÑбиÑаемÑÑ ÑÑÑок. Ðн Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð¾Ð´Ð½Ð¾ из ÑледÑÑÑÐ¸Ñ Ð·Ð½Ð°Ñений:NEXTÐÑбÑаÑÑ ÑледÑÑÑÑÑ ÑÑÑокÑ. ÐÑо дейÑÑвие подÑазÑмеваеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ, еÑли
напÑавлениеопÑÑено.PRIORÐÑбÑаÑÑ Ð¿ÑедÑдÑÑÑÑ ÑÑÑокÑ.
FIRSTÐÑбÑаÑÑ Ð¿ÐµÑвÑÑ ÑÑÑÐ¾ÐºÑ Ð·Ð°Ð¿ÑоÑа (аналогиÑно ÑказаниÑ
ABSOLUTE 1).LASTÐÑбÑаÑÑ Ð¿Ð¾ÑледнÑÑ ÑÑÑÐ¾ÐºÑ Ð·Ð°Ð¿ÑоÑа (аналогиÑно
ABSOLUTE -1).ABSOLUTEÑиÑлоÐÑбÑаÑÑ ÑÑÑÐ¾ÐºÑ Ð¿Ð¾Ð´ номеÑом
ÑиÑÐ»Ð¾Ñ Ð½Ð°Ñала, либо под номеÑомabs(Ñ ÐºÐ¾Ð½Ñа, еÑлиÑиÑло)ÑиÑлооÑÑиÑаÑелÑно. ÐÑлиÑиÑловÑÑ Ð¾Ð´Ð¸Ñ Ð·Ð° гÑаниÑÑ Ð½Ð°Ð±Ð¾Ñа ÑÑÑок, кÑÑÑÐ¾Ñ ÑазмеÑаеÑÑÑ Ð¿ÐµÑед пеÑвой или поÑле поÑледней ÑÑÑоки; в ÑаÑÑноÑÑи, ÑABSOLUTE 0кÑÑÑÐ¾Ñ Ð¾ÐºÐ°Ð·ÑваеÑÑÑ Ð¿ÐµÑед пеÑвой ÑÑÑокой.RELATIVEÑиÑлоÐÑбÑаÑÑ ÑÑÑÐ¾ÐºÑ Ð¿Ð¾Ð´ номеÑом
ÑиÑло, ÑÑиÑÐ°Ñ Ñо ÑледÑÑÑей впеÑÑд, либо под номеÑомabs(, ÑÑиÑÐ°Ñ Ñ Ð¿ÑедÑдÑÑей назад, еÑлиÑиÑло)ÑиÑлооÑÑиÑаÑелÑно.RELATIVE 0повÑоÑно ÑÑиÑÑÐ²Ð°ÐµÑ ÑекÑÑÑÑ ÑÑÑокÑ, еÑли ÑÐ°ÐºÐ¾Ð²Ð°Ñ Ð¸Ð¼ÐµÐµÑÑÑ.ÑиÑлоÐÑбÑаÑÑ ÑледÑÑÑее
ÑиÑлоÑÑÑок (аналогиÑноFORWARD).ÑиÑлоALLÐÑбÑаÑÑ Ð²Ñе оÑÑавÑиеÑÑ ÑÑÑоки (аналогиÑно
FORWARD ALL).FORWARDÐÑбÑаÑÑ ÑледÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ (аналогиÑно
NEXT).FORWARDÑиÑлоÐÑбÑаÑÑ ÑледÑÑÑее
ÑиÑлоÑÑÑок.FORWARD 0повÑоÑно вÑбиÑÐ°ÐµÑ ÑекÑÑÑÑ ÑÑÑокÑ.FORWARD ALLÐÑбÑаÑÑ Ð²Ñе оÑÑавÑиеÑÑ ÑÑÑоки.
BACKWARDÐÑбÑаÑÑ Ð¿ÑедÑдÑÑÑÑ ÑÑÑÐ¾ÐºÑ (аналогиÑно
PRIOR).BACKWARDÑиÑлоÐÑбÑаÑÑ Ð¿ÑедÑдÑÑее
ÑиÑлоÑÑÑок (Ñ Ð¿ÐµÑемеÑением назад).BACKWARD 0повÑоÑно вÑбиÑÐ°ÐµÑ ÑекÑÑÑÑ ÑÑÑокÑ.BACKWARD ALLÐÑбÑаÑÑ Ð²Ñе пÑедÑдÑÑие ÑÑÑоки (Ñ Ð¿ÐµÑемеÑением назад).
ÑиÑлоÐдеÑÑ
ÑиÑлоâ ÑелоÑиÑÐ»ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð½ÑÑанÑа, возможно Ñо знаком, опÑеделÑÑÑÐ°Ñ ÑмеÑение или колиÑеÑÑво вÑбиÑаемÑÑ ÑÑÑок. ÐÐ»Ñ Ð²Ð°ÑианÑовFORWARDиBACKWARDÑказание оÑÑиÑаÑелÑногоÑиÑлаÑавнознаÑно Ñмене напÑавлениÑFORWARDнаBACKWARDи наобоÑоÑ.имÑ_кÑÑÑоÑаÐÐ¼Ñ Ð¾ÑкÑÑÑого кÑÑÑоÑа.
ÐÑÐ²Ð¾Ð´Ð¸Ð¼Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ
ÐÑи ÑÑпеÑном вÑполнении FETCH возвÑаÑÐ°ÐµÑ Ð¼ÐµÑÐºÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð²Ð¸Ð´Ð°
FETCH ÑиÑло
ÐдеÑÑ count â колиÑеÑÑво вÑбÑаннÑÑ
ÑÑÑок (Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ нÑлевÑм). ÐамеÑÑÑе, ÑÑо в psql меÑка ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð½Ðµ вÑдаÑÑÑÑ, Ñак как вмеÑÑо Ð½ÐµÑ psql вÑÐ²Ð¾Ð´Ð¸Ñ Ð²ÑбÑаннÑе ÑÑÑоки.
ÐÑимеÑаниÑ
ÐÑли пеÑемеÑение кÑÑÑоÑа в FETCH не огÑаниÑиваеÑÑÑ Ð²Ð°ÑианÑами FETCH NEXT или FETCH FORWARD Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм ÑиÑлом, кÑÑÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ð¾Ð±ÑÑвлен Ñ Ñказанием SCROLL. ÐÐ»Ñ Ð¿ÑоÑÑÑÑ
запÑоÑов Postgres Pro допÑÑÐºÐ°ÐµÑ Ð¾Ð±ÑаÑное пеÑемеÑение кÑÑÑоÑа, обÑÑвленного без SCROLL, но на ÑÑо поведение лÑÑÑе не ÑаÑÑÑиÑÑваÑÑ. ÐÑли кÑÑÑÐ¾Ñ Ð¾Ð±ÑÑвлен Ñ Ñказанием NO SCROLL, пеÑемеÑение назад запÑеÑаеÑÑÑ.
ÐаÑÐ¸Ð°Ð½Ñ ABSOLUTE ниÑколÑко не бÑÑÑÑее, Ñем пеÑемеÑение к ÑÑебÑемой ÑÑÑоке Ñ Ð¾ÑноÑиÑелÑнÑм Ñдвигом: нижележаÑий меÑ
анизм вÑÑ Ñавно должен пÑоÑиÑаÑÑ Ð²Ñе пÑомежÑÑоÑнÑе ÑÑÑоки. ÐÑбоÑки по абÑолÑÑÐ½Ð¾Ð¼Ñ Ð¾ÑÑиÑаÑелÑÐ½Ð¾Ð¼Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐµÑÑ Ñ
Ñже: ÑнаÑала запÑÐ¾Ñ Ð½ÐµÐ¾Ð±Ñ
одимо пÑоÑиÑаÑÑ Ð´Ð¾ конÑа и найÑи поÑледнÑÑ ÑÑÑокÑ, а заÑем веÑнÑÑÑÑÑ Ð½Ð°Ð·Ð°Ð´ к Ñказанной ÑÑÑоке. Ðднако пеÑемоÑка к наÑÐ°Ð»Ñ Ð·Ð°Ð¿ÑоÑа (FETCH ABSOLUTE 0) вÑполнÑеÑÑÑ Ð±ÑÑÑÑо.
ÐпÑеделиÑÑ ÐºÑÑÑÐ¾Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° DECLARE, а пеÑемеÑÑиÑÑ ÐµÐ³Ð¾, не ÑиÑÐ°Ñ Ð´Ð°Ð½Ð½Ñе, â команда MOVE.
ÐÑимеÑÑ
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð´ÐµÐ¼Ð¾Ð½ÑÑÑиÑÑÐµÑ Ð¿ÐµÑемеÑение кÑÑÑоÑа в ÑаблиÑе:
BEGIN WORK; -- Создание кÑÑÑоÑа: DECLARE liahona SCROLL CURSOR FOR SELECT * FROM films; -- ÐолÑÑение пеÑвÑÑ 5 ÑÑÑок ÑеÑез кÑÑÑÐ¾Ñ liahona: FETCH FORWARD 5 FROM liahona; code | title | did | date_prod | kind | len -------+-------------------------+-----+------------+----------+------- BL101 | The Third Man | 101 | 1949-12-23 | Drama | 01:44 BL102 | The African Queen | 101 | 1951-08-11 | Romantic | 01:43 JL201 | Une Femme est une Femme | 102 | 1961-03-12 | Romantic | 01:25 P_301 | Vertigo | 103 | 1958-11-14 | Action | 02:08 P_302 | Becket | 103 | 1964-02-03 | Drama | 02:28 -- ÐолÑÑение пÑедÑдÑÑей ÑÑÑоки: FETCH PRIOR FROM liahona; code | title | did | date_prod | kind | len -------+---------+-----+------------+--------+------- P_301 | Vertigo | 103 | 1958-11-14 | Action | 02:08 -- ÐакÑÑÑие кÑÑÑоÑа и завеÑÑение ÑÑанзакÑии: CLOSE liahona; COMMIT WORK;
СовмеÑÑимоÑÑÑ
Ð ÑÑандаÑÑе SQL команда FETCH опÑеделена ÑолÑко Ð´Ð»Ñ Ð²ÑÑÑаиваемого SQL. ÐпиÑÐ°Ð½Ð½Ð°Ñ Ð·Ð´ÐµÑÑ ÑеализаÑÐ¸Ñ FETCH возвÑаÑÐ°ÐµÑ Ð´Ð°Ð½Ð½Ñе подобно опеÑаÑоÑÑ SELECT, а не помеÑÐ°ÐµÑ Ð¸Ñ
в пеÑеменнÑе иÑполнÑÑÑей ÑÑедÑ. РоÑÑалÑном, FETCH полноÑÑÑÑ Ð¿ÑÑмо-ÑовмеÑÑима Ñо ÑÑандаÑÑом SQL.
ФоÑÐ¼Ñ FETCH Ñ FORWARD и BACKWARD, а Ñакже ÑоÑÐ¼Ñ FETCH и ÑиÑлоFETCH ALL (в коÑоÑÑÑ
FORWARD подÑазÑмеваеÑÑÑ) ÑвлÑÑÑÑÑ ÑаÑÑиÑениÑми Postgres Pro.
Ð ÑÑандаÑÑе SQL пеÑед именем кÑÑÑоÑа допÑÑкаеÑÑÑ ÑолÑко Ñказание FROM; возможноÑÑÑ ÑказаÑÑ IN или опÑÑÑиÑÑ Ð¾Ð±Ð° ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¾ÑноÑиÑÑÑ Ðº ÑаÑÑиÑениÑм.