oracle 11g 中有没有办法在表中存储临时值?

Posted

技术标签:

【中文标题】oracle 11g 中有没有办法在表中存储临时值?【英文标题】:Is there a way in oracle 11g to store temporary values in a table? 【发布时间】:2018-12-14 13:03:32 【问题描述】:

我在 oracle 中有一个表类型 input+output(IO) 变量(有 5 列),我在循环中从中读取值并执行验证,如果触发了验证,我在第五列中放了一条错误消息.如果第五列为空,我在表中插入值。我有这方面的工作代码。但是我需要的是,假设我有 5 行要插入,并且如果对任何行触发了验证,那么也不应该为其他行插入数据。我无法引发异常,因为我仍然需要其他行的错误消息。

我有两个解决方案。首先..首先执行验证(不插入),如果第五列为空,则将再次运行循环并插入表中。 其次..在临时表中插入值,如果直到最后一行都没有触发验证,则将从临时表中选择并插入到主表中。

有没有更好的方法来处理这个问题?

【问题讨论】:

您认为您的第一个建议方法有什么问题?如果您包含示例数据和代码(包括表类型的类型定义),将会有所帮助。您也许可以使用 forall 而不是第二个显式循环,但不清楚。 查看 Oracle 文档中的 error logging clause 我知道在这里解释我的问题会很困难。但无论如何,我会尝试 forall,因为它有更好的性能 【参考方案1】:

您可以尝试在插入之前验证所有行,然后使用命令“INSERT SELECT”将所有行插入到表中,第五列是否填充错误消息(基于您之前所做的验证)。

例子:

BEGIN
    --DO SOME VALIDATION

    INSERT INTO <TABLE_NAME>
    SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4, 'ERROR OR NOT ERROR' COLUMN5
      FROM <OTHER_TABLE>;
END;

这样你就不需要第二个循环了,但你需要看看它是否适合你的需要。

【讨论】:

是的,这会有所帮助,但我将不得不创建另一个相同类型的表。创建新表的任何替代方法?

以上是关于oracle 11g 中有没有办法在表中存储临时值?的主要内容,如果未能解决你的问题,请参考以下文章

存储过程 oracle 11g 中的 TEMP 表

从 Oracle Apex 页面获取多个值并将其存储在表中

如何在 11g 中插入多个值?

在Oracle中临时存储多个值[重复]

Oracle 12c - 使用另一个表中的值在表中插入值

Oracle临时表(Temporary Table)