0

我有一个过程,它被赋予一个值作为输入,在执行了一些过程之后,在该过程中使用游标,我希望该过程返回一个表。

作为 input_param 给出的这个值是用于标识多行的非唯一 ID。

这样我就可以运行如下命令:

select * from {call(procedure_name(input_Param)}

我对 PLSQL 的了解有限。

我不确定一个过程中是否可以有一个游标定义,如果可能的话,那么我如何从过程中返回整个表。

顺便说一句:必须使用 select 语句调用此过程,如果不是 select 语句,则它应该返回一个表,select *最后带有 a。如果我必须指定要输出的列而不是select *我需要提供所有这些列名作为 input_Params 吗?IE。如果我希望该过程仅返回少量列,我该怎么办?

谢谢

4

1 回答 1

2

你需要使用PIPELINED函数。下面的示例,最后链接到更多信息。

CREATE TABLE test_pipe (
  id NUMBER,
  name VARCHAR2(20),
  salary NUMBER
);

INSERT INTO test_pipe VALUES (1, 'Smith', 5000);
INSERT INTO test_pipe VALUES (2, 'Brown', 8000);
INSERT INTO test_pipe VALUES (3, 'Bay', 10000);

COMMIT;


CREATE TYPE t_pipe_row_test AS OBJECT (
  name VARCHAR2(20),
  salary NUMBER
);
/

CREATE TYPE t_pipe_test_tab IS TABLE OF t_pipe_row_test;
/

CREATE OR REPLACE FUNCTION test_func_pipe(p_min_salary IN NUMBER)
  RETURN t_pipe_test_tab
  PIPELINED
AS
BEGIN
  FOR v_rec IN (SELECT name, salary
                  FROM test_pipe
                WHERE salary >= p_min_salary)
  LOOP
    PIPE ROW (t_pipe_row_test(v_rec.name, v_rec.salary));
  END LOOP;
END;
/

SELECT * FROM TABLE(test_func_pipe(6000));

输出:

姓名 薪水
-------- ----------
棕色 8000
湾 10000

更多关于 Tim Hall 的流水线函数

于 2013-10-29T11:22:54.053 回答