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 中迭代或调用程序。
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 中迭代或调用程序。