PostgreSQL游標(biāo)
步驟:
1腰涧、定義一個游標(biāo):declare 游標(biāo)名 cursor
2碑宴、打開一個游標(biāo)
3、從結(jié)果集抓取行到游標(biāo)
4潘悼、檢查是否還有行需要抓取齐唆,如果是返回第三步執(zhí)行抓取嗤栓,如果不是,執(zhí)行第五條
5箍邮、關(guān)閉游標(biāo)
語法:
一茉帅、定義游標(biāo):
declare 游標(biāo)名 cursor [for sql語句];
for sql語句表示該游標(biāo)是否和sql語句進(jìn)行綁定,如果沒有for關(guān)鍵字指定媒殉,則表明該游標(biāo)是未綁定狀態(tài)
舉例1:
declare
mycursor1 cursor;
mycursor2 cursor for select * from film;
mycursor3 cursor(year integer) for select * from film where release_year=year;
(year integer)表示參數(shù)
二、打開游標(biāo):
(1)摔敛、打開未綁定的游標(biāo):
open mycursor1 for select * from film;
或:
query:= 'select * from film order by $1;'
open mycursor1 for execute query using release_year; [release_year為替換query排序的列名變量$1]
(2)廷蓉、打開已綁定的游標(biāo):
因?yàn)榻壎ǖ挠螛?biāo)已經(jīng)聲明了查詢,所以再打開查詢時,如果有參數(shù)桃犬,只需要將參數(shù)傳遞即可刹悴。
open mycursor2;
open mycursor3(year:=2005)
三、游標(biāo)的使用:
游標(biāo)抓取行:
fetch [option from] 游標(biāo)名 into 變量名;
fetch語句從游標(biāo)獲取下一行并分配給'變量名'攒暇,它可以是一條記錄土匀、一個行變量或一個逗號分隔的變量列表。如果沒有找到更多的行形用,'變量名'被設(shè)置為NULL(s)
默認(rèn)情況下就轧,如果不顯示指定方向,光標(biāo)將獲取下一行,option有如下值:
next
last
prior
first
absolute count
relative count
forward
backward
【注】:forward和backward僅適用于使用滾動選項聲明的游標(biāo)田度。
舉例:
fetch mycursor2 into row_film;
fetch next from mycursor3 into row_film;
四妒御、移動游標(biāo):
如果指向移動光標(biāo)而不想檢索任何行,可以使用move來移動游標(biāo)镇饺,而達(dá)到從某個位置再開始抓取行
move [option from] 游標(biāo)名;
option有如下值:
next
last
prior
first
absolute count
relative count
forward
backward
【注】:forward和backward僅適用于使用滾動選項聲明的游標(biāo)乎莉。
move mycursor1;
move next from mycursor2;
move relative -1 from mycursor3;
move forward 3 from mycursor3;
五、刪除或更新行:
可以通過游標(biāo)刪除或更新行
舉例:
update table_name set 列名='值' where current of 游標(biāo)名;
delete from table_name where current of 游標(biāo)名;
六奸笤、關(guān)閉游標(biāo):
close 游標(biāo)名;
close 關(guān)閉游標(biāo)后惋啃,允許使用open再次打開游標(biāo)。
舉例:
create or replace function get_film_titles(p_year integer)
returns text as $$
declare
titles text default '';
res_film record;
mycursor cursor(p_year integer) for select title,release_year from film where release_year=p_year; --定義游標(biāo)并綁定sql語句
begin
open mycursor(p_year); --打開游標(biāo)
loop --定義一個loop循環(huán)监右,來循環(huán)的抓取游標(biāo)的行
fetch mycursor into res_film;
exit when not found; --當(dāng)循環(huán)抓取帶最后一行之后边灭,抓取的為空即退出循環(huán)
if res_film.title like '%ful%' then
titles := titles||','||res_film.title||':'||res_film.release_year;
end if;
end loop;
close mycursor;
return titles;
end; $$
language plpgsql;
select get_film_titles(2006);
結(jié)果:
,Grosse Wonderful:2006,Day Unfaithful:2006,Reap Unfaithful:2006,Unfaithful Kill:2006,Wonderful Drop:2006
PostgreSQL的游標(biāo)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來频轿,“玉大人垂涯,你說我怎么就攤上這事『叫希” “怎么了耕赘?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長膳殷。 經(jīng)常有香客問我操骡,道長,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任册招,我火速辦了婚禮岔激,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘是掰。我一直安慰自己虑鼎,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布键痛。 她就那樣靜靜地躺著炫彩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪散休。 梳的紋絲不亂的頭發(fā)上媒楼,一...
- 文/蒼蘭香墨 我猛地睜開眼胁勺,長吁一口氣:“原來是場噩夢啊……” “哼世澜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起署穗,我...
- 序言:老撾萬榮一對情侶失蹤寥裂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后案疲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體封恰,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年褐啡,在試婚紗的時候發(fā)現(xiàn)自己被綠了诺舔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布,位于F島的核電站莉恼,受9級特大地震影響拌喉,放射性物質(zhì)發(fā)生泄漏翼岁。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一司光、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧悉患,春花似錦残家、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陪捷,卻和暖如春回窘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背市袖。 一陣腳步聲響...
- 正文 我出身青樓微峰,卻偏偏與公主長得像舷丹,于是被迫代替她去往敵國和親蜓肆。 傳聞我的和親對象是個殘疾皇子颜凯,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 1症概、確保正確安裝了PostgreSQL數(shù)據(jù)庫厉颤,注意端口號不能相同 我的安裝目錄如圖: 其中9.6版本的端口號為54...
- 關(guān)于 count 函數(shù)的使用一直存在爭議穴豫,尤其是在 MySQL 中逼友,作為流行度越來越高的 PostgreSQL 是...
- PostgreSQL的MVCCvs InnoDB的MVCC 任何一個數(shù)據(jù)庫最主要功能之一是可擴(kuò)展精肃。如果不刪除彼此,...
- 安裝PostgreSQL有3種方式,分別是: 直接在系統(tǒng)平臺上直接使用系統(tǒng)自帶的包管理工具來安裝黎烈,例如 RHEL ...