oracle - 如何通过引用在递归调用中使用自定义创建的表(在函数中)
问题描述
我正在创建一个函数,该函数应该递归地遍历数据库中的树结构,并且在每次迭代中我必须计算容量(一些数字 => 不重要)并向表中添加一个新行,该行不存在于数据库中。这意味着该表在调用函数中初始化并通过引用传递。
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:表或视图不存在 => 这是插入部分
解决方案
如果您想进行 group by 和其他表操作之类的操作,那么我建议您使用GLOBAL TEMPORARY TABLE
.
它们是特定于会话的表,数据仅在您的会话中可见。此外,您不必在使用后删除数据,因为一旦会话关闭,它就会被清除。
您可以参考 oracle 文档以获取更多信息。
干杯!!
推荐阅读
- python - 跨度标签-如何将 HTML 上的数字与跨度标签相加
- c# - 在 cookie 中存储 JWT 令牌后,如何在 ASP.NET Core 3.1 中破坏该 cookie 并获取信息
- python - 检查不同建模的 Python 错误
- python - 复制数组时的numpy内存管理
- reactjs - 在 Nextjs 上导入 html-to-draftjs
- java - 使用多个 log4j 配置文件
- c - 为什么我的输出给出一个垃圾值?
- ruby-on-rails - 我可以用 number_of_days.days.ago.to_date 替换 (Date.current - created_at.to_date).to_i <= number_of_days 吗?这是个好主意吗?
- android - 刚刚添加了新片段,但它在 android studio 中显示为灰色?
- node.js - at=错误代码=H10 desc="应用程序崩溃"方法=获取路径="/"