CLOSE
描述:關閉一個遊標
語法:
CLOSE cursor_name
注意:Greenplum數據庫不支持顯示地打開(open)遊標,當一個遊標被聲明的時候就會被打開,使用declare語句聲明並且打開一個遊標
DECLARE
描述:定義一個遊標
語法:
DECLARE name [BINARY] [INSENSITIVE] [NO SCROLL] CURSOR
[{WITH | WITHOUT} HOLD]
FOR query [FOR READ ONLY]
參數:
name
被創建的遊標的名字
BINARY
遊標以binary的數據返回,而不是以text形式返回
INSENSITIVE
在greenplum數據庫中所有的遊標都是insensitive,這個參數目前沒有影響,並且與標準的SQL兼容
NO SCROLL
遊標不能以非順序的方式提取數據,該參數爲默認值,目前不支持scrollable cursors (SCROLL)
WITH HOLD 與WITHOUT HOLD
WITH HOLD 指的事務被成功提交之後還可以繼續被使用。
WITHOUT HOLD 指的遊標不可以在創建它的事務之外使用,WITHOUT HOLD 是默認值.
當查詢中包括FOR UPDATE or FOR SHARE語句時,WITH HOLD 不能使用.
query
能夠讓遊標返回row的命令
FOR READ ONLY
遊標以只讀的方式使用
Examples
Declare a cursor:
DECLARE mycursor CURSOR FOR SELECT * FROM mytable;
兼容性:
1.標準的SQL允許遊標嵌入SQL和模塊之中,greenplum數據庫允許以交互式的形式使用你遊標
2.greenplum沒有爲遊標實現open的語句,當一個遊標被聲明的時候,會被打開
3.標準的SQL允許向前和向後移動遊標,greenplum數據庫只允許向前移動遊標
4.Binary cursors是 Greenplum 數據庫的擴展.
FETCH
描述:從一個使用遊標的查詢中提取數據row
語法
FETCH [ forward_direction { FROM | IN } ] cursorname
forward_direction 可以爲空也可以是下面的其中一個:
NEXT
FIRST
LAST
ABSOLUTE count
RELATIVE count
count
ALL
FORWARD
FORWARD count
FORWARD ALL
參數:
forward_direction
定義提取數據的方向和提取的行數,greenplum僅僅支持向前提取數據,可以使用一下參數:
NEXT
提取下一行,如果forward_direction省略,則爲默認值。
FIRST
提取查詢結果的第一行(和ABSOLUTE 1 一樣),只有第一次使用遊標提取數據的時候,纔可以被使用
LAST
提取查詢結果的最後一行(和 ABSOLUTE -1一樣)
ABSOLUTE count
提取查詢結果的具體行數的數據,如果超過了行的範圍,則返回最後一行。
RELATIVE count
提取在當前遊標位置之前的查詢結果的具體行數的數據,RELATIVE 0代表重新提取當前行
count
提取count數量的行(和FORWARD count一樣)
ALL
提取所有的剩餘行(和FORWARD ALL一樣)
FORWARD
提取下一行(和NEXT一樣)
Fetch the next row (same as NEXT).
FORWARD count
提取下面count數量的行,FORWARD 0 代表重新提取當前行.
FORWARD ALL
提取所有的剩餘行
cursorname
遊標的名字
Examples
-- 開啓一個事務:
BEGIN;
-- 設置遊標:
DECLARE mycursor CURSOR FOR SELECT * FROM films;
-- 提取遊標中的前5行數據:
FETCH FORWARD 5 FROM mycursor;
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
-- 關閉遊標結束事務:
CLOSE mycursor;
COMMIT;
MOVE
描述:定位一個遊標
語法
MOVE [ forward_direction {FROM | IN} ] cursorname
下面的forward_direction參數具體參考FETCH的參數
NEXT
FIRST
LAST
ABSOLUTE count
RELATIVE count
count
ALL
FORWARD
FORWARD count
FORWARD ALL
Outputs
輸出的結果值
MOVE count
Examples
-- 開啓一個事務:
BEGIN;
-- 設置遊標:
DECLARE mycursor CURSOR FOR SELECT * FROM films;
-- 將遊標位置向前移動5行:
MOVE FORWARD 5 IN mycursor;
MOVE 5
--提取下一行數據 (從第6行開始):
FETCH 1 FROM mycursor;
code | title | did | date_prod | kind | len
-------+--------+-----+------------+--------+-------
P_303 | 48 Hrs | 103 | 1982-10-22 | Action | 01:37
(1 row)
--關閉遊標結束事務:
CLOSE mycursor;
COMMIT;
END
描述:提交當前事務.
語法
END [WORK | TRANSACTION]
參數
WORK
TRANSACTION
選擇性的參數,不起作用.
Examples
提交當前事務:
END;
兼容性
END 是greenplum數據庫提供的功能性擴展,等同於COMMIT ,而COMMIT 是標準的SQL語句。
COMMIT
描述:提交當前事務
語法
COMMIT [WORK | TRANSACTION]
參數
WORK
TRANSACTION
選擇性的參數,不起作用.
Examples
提交當前事務:
COMMIT;
BEGIN
描述:啓動一個事務塊.
語法
BEGIN [WORK | TRANSACTION] [transaction_mode]
[READ ONLY | READ WRITE]
transaction_mode參數如下:
ISOLATION LEVEL | {SERIALIZABLE | READ COMMITTED | READ UNCOMMITTED}
參數
WORK
TRANSACTION
可選擇的關鍵字,不起作用
SERIALIZABLE
READ COMMITTED
READ UNCOMMITTED
標準SQL定義了四種事務隔離級別: READ COMMITTED, READ
UNCOMMITTED, SERIALIZABLE, and REPEATABLE READ。默認值爲 READ COMMITTED.
在Greenplum中READ COMMITTED與READ UNCOMMITTED是一樣的。Greenplum不支持REPEATABLE READ ,如果需要使用此隔離級別,則使用 SERIALIZABLE 來代替。
SERIALIZABLE最嚴格的事務隔離。
READ WRITE
READ ONLY
決定事務是讀/寫還是隻讀. Read/write 是默認的.
當transaction 是 read-only時, 一些SQL語句會被不允許使用,比如:INSERT,
UPDATE, DELETE等。
Examples
開啓一個事務塊:
BEGIN;
以 serializable 隔離級別開啓一個事務塊:
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;