2010-10-28 19 views
2

我想知道如何檢查引用遊標是否返回數據。如何檢查引用遊標是否從pl/sql過程返回數據

比方說,我有下面的代碼在PL/SQL包:

type refcursor is ref cursor; 

procedure Foo(cursorresult out refcursor) is 
begin 
    open cursorresult for 
    select * 
     from table t 
     inner join t2 on t.id = t2.id 
    where t.column1 is null; 
end; 

procedure DoSomeghingIfFooHasResults is 
    curFoo refcursor; 
    begin 
    Foo(curSansOwner); 
    if curFoo%found then 
     -- Do something 
    end if; 
end function; 

此代碼是更復雜的過程中使用,並在富的查詢使用多個表。

我需要從一個asp.net應用程序中的Foo返回的數據,但是當Foo找到一些數據時我也需要做些什麼。

我想在幾個地方重複使用查詢,但我不認爲這將是一個很好的候選人的觀點。

要知道Foo是否找到某種東西,最好的方法是什麼?

謝謝。

回答

5

知道,如果它發現的時候,唯一的辦法就是從它取指令:

procedure DoSomeghingIfFooHasResults is 
    curFoo refcursor; 
    recFoo mytable%ROWTYPE; 
    begin 
    Foo(curFoo); 
    fetch curFoo into recFoo; 
    if curFoo%found then 
     -- Do something 
    end if; 
end function; 
+0

的問題是,因爲我的數據,我真正的PROC來自多個表,我不能使用%ROWTYPE。編輯的代碼示例反映出 – Martin 2010-10-28 15:36:42

+0

你不能一般地做到這一點我同意 - 事實上你可能無法做到你想做的事。 「做某事」代碼必須知道它將要使用的數據的結構,因此它必須處理遊標不返回行的情況。 – 2010-10-28 15:58:15

+1

您可以聲明一個記錄類型以獲取,從基礎查詢中匹配預期的輸出字段類型。 (希望你已經簡化了,但使用'*'並不理想;除此之外,你有兩列稱爲'ID')。 – 2010-10-28 15:59:18

相關問題