Oracle 相当于returns 一个inline table 的存储过程?

Oracle equivalent of stored procedure that returns an inline table?

T-SQL 中的示例(SQL 服务器 - 来自 here):

CREATE PROC proc_authors
    @au_lname VARCHAR(40)
AS
    SELECT  
        au_id, au_fname, au_lname, city, state
    FROM authors
    WHERE au_lname = @au_lname
go

是否可以在 Oracle 中创建一个 returns 内联 table 的存储过程(无需声明类型 - 如上所述)?如果没有,最接近的选择是什么?即声明内联类型,然后使用它。这个想法是尽量减少授予的数据库权限的数量。

请在您的回答中包含示例代码。

使用存储过程与函数的原因 - 我们有只能执行存储过程或原始查询的遗留软件。好像只有里面的存储过程支持参数化执行,这就是我们所追求的。

也许您正在搜索这样的东西:

create table author
(
    au_id number,
    au_name varchar2(100)
);

insert into author (au_id, au_name) values(1, 'ME');

create or replace function getAuthor(auName varchar2)
return author%rowtype
is
    retval author%rowtype;
begin
    select *  into retval from author where au_name=auName;
    return retval;
end;

declare
 auth author%rowtype;
begin
    auth := getAuthor('ME');
    dbms_output.put_line(auth.au_id);
end;

用 ref cursor 试试这个

PROCEDURE proc_get_tada(ip_user IN VARCHAR2, 
                        op_error_code OUT NUMBER, 
                        op_cursor OUT SYS_REFCURSOR,) AS

BEGIN

  OPEN op_cursor FOR
    SELECT * FROM your_table yt where yt.user = ip_user;

EXCEPTION
  WHEN OTHERS THEN
    op_error_code := -1;
END proc_get_tada;

您将从您那里收集所有数据 table 您可以在 java 中迭代或调用程序。