我该如何执行功能?

时间:2017-05-06 20:32:02

标签: sql oracle function

我正在尝试根据我给出的数字创建一个返回行的函数。我已经创建了这个功能,但似乎无法使其正常工作。

这是我的功能:

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不是一个程序......

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分: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;