2017-05-06 76 views
1

我想做一個函數,返回一個基於我給的數字的行。我已經創建了該功能,但似乎無法使其工作。我如何執行功能?

這是我的函數:

create or replace function vitest(t_na test.na%type) 
return sys_refcursor is t_test sys_refcursor; 
begin 
open t_test for 
    select * from test where na = t_na; 
return t_test; 
end; 

我已經嘗試使用:

select vitest(1) from dual; 

但它給我的錯誤:ORA-00932。 我使用也試過:

begin 
vitest(1); 
end; 

但它說vitest不是一個過程......

我怎樣才能使它發揮作用?

+0

凡test.na%的類型和定義SYS_REFCURSOR? –

+0

@PrescottChartier:'sys_refcursor'是引用遊標的標準Oracle類型。 –

+0

我必須在時代背後,我通常定義一個REF CURSOR類型並以此方式使用它。我誠實地向上帝從來沒有聽說過sys_refcursor直到現在。 –

回答

0

假設你test表有col1col2col3列,你可以打電話給你的功能如下:

DECLARE 
    l_cursor SYS_REFCURSOR; 
    l_col1 test.col1%TYPE; 
    l_col2 test.col2%TYPE; 
    l_col3 test.col3%TYPE; 
BEGIN 

    l_cursor := vitest(1);   
    LOOP 
    FETCH l_cursor 
    INTO l_col1, l_col2, l_col3; 
    EXIT WHEN l_cursor%NOTFOUND; 
    DBMS_OUTPUT.PUT_LINE(l_col1 || ' | ' || l_col2 || ' | ' || l_col3); 
    END LOOP; 
    CLOSE l_cursor; 
END; 

*另外,你選擇現在將改變

select * from test where na = t_na;

select col1,col2,col3 from test where na = t_na;