【发布时间】:2015-03-05 07:20:50
【问题描述】:
我想返回多行作为存储过程的结果。我正在递归调用这个存储过程,以读取所有嵌套值。
这是我目前的程序:
CREATE OR REPLACE PROCEDURE TEST
(
MATERIAL_H IN VARCHAR2,
) AS
BEGIN
FOR R IN (SELECT COMPONENT FROM TTP10.PSMS WHERE MATERIAL = MATERIAL_H) LOOP
TEST (R.COMPONENT);
DBMS_OUTPUT.PUT_LINE(R.COMPONENT); -- Each COMPONENT should be one row in the result
END LOOP;
END TEST;
编辑
如果添加了数据库记录的例子。如您所见,MATERIAL 1 由多个COMPONENT (89, 90, 91) 组成。这些组件也可以由其他组件组成,例如COMPONENT (90, 5)。
我的存储过程读取材料和组件之间的所有关系。我想在一个材质中获取所有嵌套组件。
MATERIAL 1: (89, 90, 91, 5, 6, 7, 2, 3, 4)
+-----------+-----------+--+------------+-----------+
| MATERIAL | COMPONENT | | MATERIALS | COMPONENT |
+-----------+-----------+--+------------+-----------+
| 1 | 89 | | 2 | NULL |
+-----------+-----------+--+------------+-----------+
| 1 | 90 | | 3 | NULL |
+-----------+-----------+--+------------+-----------+
| 1 | 91 | | 4 | NULL |
+-----------+-----------+--+------------+-----------+
| 90 | 5 | | 6 | NULL |
+-----------+-----------+--+------------+-----------+
| 90 | 6 | | 7 | NULL |
+-----------+-----------+--+------------+-----------+
| 90 | 7 | | 91 | NULL |
+-----------+-----------+--+------------+-----------+
| 5 | 2 | | 89 | NULL |
+-----------+-----------+--+------------+-----------+
| 5 | 3 | | | |
+-----------+-----------+--+------------+-----------+
| 5 | 4 | | | |
+-----------+-----------+--+------------+-----------+
我的存储过程运行良好,它打印了材料和组件之间的所有嵌套关系。
我怎样才能将DBMS_OUTPUT.PUT_LINE(R.COMPONENT); 的输出作为结果返回?请注意,我无法更改数据库结构。
【问题讨论】:
-
据我了解,您可以使用递归
FUNCTION返回一个值。你可以把问题说清楚 -
您要返回多行或多列?
-
@Exhausted 请看看我的编辑。我希望这有助于理解问题。
-
@Polppan 多行。
-
@hofmeister 试试这个stackoverflow.com/q/13225532/599528
标签: sql oracle stored-procedures return-value