FETCH
СинÑакÑиÑ
FETCH [ direction [ FROM | IN ] ] имÑ_кÑÑÑоÑа
ÐдеÑÑ direction Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑÑÑÑм или пÑинимаÑÑ ÑледÑÑÑее знаÑение:
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, пÑавила бÑдÑÑ Ð´ÑÑгими — Ñм. Раздел 40.7.
ÐаÑамеÑÑÑ
- direction
ÐаÑамеÑÑ Ð½Ð°Ð¿Ñавление задаÑÑ Ð½Ð°Ð¿Ñавление Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¸ ÑиÑло вÑбиÑаемÑÑ ÑÑÑок. Ðн Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð¾Ð´Ð½Ð¾ из ÑледÑÑÑÐ¸Ñ Ð·Ð½Ð°Ñений:
- 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. ÐÐ»Ñ Ð¿ÑоÑÑÑÑ Ð·Ð°Ð¿ÑоÑов PostgreSQL допÑÑÐºÐ°ÐµÑ Ð¾Ð±ÑаÑное пеÑемеÑение кÑÑÑоÑа, обÑÑвленного без 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 подÑазÑмеваеÑÑÑ) ÑвлÑÑÑÑÑ ÑаÑÑиÑениÑми PostgreSQL.
Ð ÑÑандаÑÑе SQL пеÑед именем кÑÑÑоÑа допÑÑкаеÑÑÑ ÑолÑко Ñказание FROM; возможноÑÑÑ ÑказаÑÑ IN или опÑÑÑиÑÑ Ð¾Ð±Ð° ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¾ÑноÑиÑÑÑ Ðº ÑаÑÑиÑениÑм.