Greenplum中游標的使用

 

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 COMMITTEDREAD 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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章