首页 > 解决方案 > 如何通过引用在递归调用中使用自定义创建的表(在函数中)

问题描述

我正在创建一个函数,该函数应该递归地遍历数据库中的树结构,并且在每次迭代中我必须计算容量(一些数字 => 不重要)并向表中添加一个新行,该行不存在于数据库中。这意味着该表在调用函数中初始化并通过引用传递。

create or replace TYPE myTableRow AS object (
  OP varchar2(50),
  VP varchar2(50),
  CisloP varchar2(50),
  Tp float,
  Tj float,
  CONSTRUCTOR FUNCTION myTableRow
 RETURN SELF AS RESULT
);


create or replace TYPE myTable AS TABLE OF myTableRow;

如您所见,我已经从行创建了行类型和表类型。

但这是交易..我有 2 个功能。首先,我声明并构建表格

RETURN myTable IS -- just a snippet...
  rozpad myTable;
  vyrobek varchar2(50);
BEGIN
  rozpad := myTable();

这个函数应该返回整个表......并且这个表被传递给另一个函数(过程),它将执行递归

RozpadKusovnik_pomocna(artikel_numer, rozpad, 1, OP_num, artikel_numer);

我只是不知道如何插入一行或创建(初始化/分配)一个新行。我有一个循环,我想在表中插入行,然后使用不同的参数再次调用相同的函数并通过引用传递同一个表,这样当我退出递归时我将拥有一个完整的表。

create or replace PROCEDURE RozpadKusovnik_pomocna(artikel_numer IN VARCHAR2, inputTable IN OUT myTable, mnozstvi IN FLOAT, OP_num IN VARCHAR2, VP_num IN VARCHAR2)
.
.
.
  LOOP
    insert into inputTable values myTableRow(OP_num, VP_num, PAPP.BELEGUNGSEINHEIT_NR, RUESTZEIT, ZEIT_JE_EINHEIT);
  END LOOP;

最后一个问题是.. 之后我该如何使用这张桌子。在执行时它会像普通表一样工作吗?所以我可以加入它并在那之后进行分组?或者我应该创建一个表并在每次执行后删除所有数据?

错误(14,17):PL/SQL:ORA-00942:表或视图不存在 => 这是插入部分

标签: oracle

解决方案


如果您想进行 group by 和其他表操作之类的操作,那么我建议您使用GLOBAL TEMPORARY TABLE.

它们是特定于会话的表,数据仅在您的会话中可见。此外,您不必在使用后删除数据,因为一旦会话关闭,它就会被清除。

您可以参考 oracle 文档以获取更多信息。

干杯!!


推荐阅读