2011-08-02 165 views
1

谷歌搜索再多似乎找到了答案,這一個...填充光標與行類型變量

我試圖修改甲骨文存儲過程是目前拉動值了一些表,並將其移動到其他表格。

它是這樣定義的ROWTYPE變量:

myRow my_tbl%ROWTYPE; 

眼下,存儲過程不用於填充行類型變量,然後用它來填充一個表中的一些邏輯:

INSERT INTO MY_TBL 
( col1, 
    col2, 
    col3, 
    -snip- 
) 
VALUES (
    myRow.aValue, 
    myRow.aValue2, 
    myRow.aValu3, 
    -snip- 
) 

而不是填充表,我想使用ROWTYPE來填充返回到Web應用程序的遊標。但是,我無法找到一種方法來執行此ROWTYPE - > REF CURSOR轉換。這可能嗎?如果沒有,是否有辦法用來自各種表格的數據並使用一些複雜的邏輯來手動填充遊標?我正在使用Oracle 10g。

謝謝!

回答

3

關於這一點的棘手部分是,您正在使用REF CURSOR,該參數用於一組行以僅爲單行返回數據。我想你只是這樣做,因爲你的web應用程序理解ref遊標,以及如何從Oracle獲取它們,但不是對象類型。我也猜測出於某種原因,你不能只是寫一個單一的select語句來根據需要檢索和操作數據(這是最簡單的方法,所以有了更多的信息,我們可以幫助你實現它)。

我可以想到有幾種方法可以做到這一點,它們都不是很漂亮,所以希望別人能夠用更好的想法加以注意。

1)由雙

DECLARE 
    refcur SYS_REFCURSOR; 
    myRow TBL%ROWTYPE; 
BEGIN 
    myRow.aValue := 1; 
    myRow.aValue2 := 3; 
    myRow.aValue3 := 5;  
    OPEN refcur 
    FOR 
     select 
      myRow.aValue, 
      myRow.aValue2, 
      myRow.aValue3 
     from 
      dual; 
    CLOSE refcur; 
END; 

2)創建返回你的行類型的表中的流水線功能選擇你的計算變量創建光標,並從該功能的選擇創建您的光標。

+0

是一個很好的書面記錄......我們只是光標一起工作。從理論上講,我可以用一個怪物查詢來做到這一點,但它會很難看!我希望能夠分解一點。在這種情況下,「從雙重選擇」語法看起來會是什麼樣子? –

+0

我已經添加了一個從雙語法中選擇樣子的例子。 – Craig

+0

在現實生活中,我們不會關閉遊標,我們會通過它或將其返回給消費者。 – APC

0

的選擇從雙會像

select myRow.aValue, 
     myRow.aValue2, 
     myRow.aValu3 
from dual; 

你應該能夠聲明遊標這一點。

有REF CURSOR在http://psoug.org/reference/ref_cursors.html

+0

你可以發表一些關於遊標聲明應該如何的代碼嗎?它應該是什麼類型?你如何獲得遊標的值? –

+0

我爲你添加了一個鏈接。 –