1

我在这个特定问题上苦苦挣扎了好几个小时。希望有人可以帮助我。

正如上面描述的问题,我有一个表格形式,它是从一个表中构建的,它的主键('ID')设置为“始终标识”。这成为表格形式的问题,因为每当我对数据进行更改并单击“保存”时,Apex 都会显示此错误:ORA-32796: cannot update a generated always identity column

我尝试了几种解决方法,例如 ROWID,但此解决方案不起作用,因为我需要将表格形式与其他表中的字段连接以显示其他信息 - 因此 ROWID 不会被保留并且不能用作主键。

我还在Apex 文档中读到:

在表上使用 IDENTITY 子句可能会对 Application Express 应用程序产生影响。如果在 INSERT 或 UPDATE 语句中包含指定了 ALWAYS 参数的 IDENTITY 列,数据库将引发错误。Application Express Builder 已得到增强,允许在创建表向导中指定标识子句。Create Form 向导将为带有 ALWAYS 参数的标识列生成“仅显示”项。

我不明白。Apex 确实生成了一个额外的列('ID_Display'),但它并没有改变我的表格形式仍然抛出相同错误的事实(上面的 ORA-32796)。这个“仅显示”项如何使我免于“无法更新生成的始终标识列”?

附带说明一下,我正在 apex.oraclecorp.com 中开发 Apex 作为服务,我无法访问文件或对我的表进行 SQL 更改。如果您之前遇到过此问题并找到解决方案,请告诉我 - 在此先感谢!

PS Apex 版本是 5.0.4。

编辑:

抱歉,我刚刚意识到 Apex 中有 SQL 命令 UI 可以执行 SQL 操作。任何人都知道如何将表的身份从 ALWAYS 更改为 DEFAULT?

4

4 回答 4

0
ALTER TABLE t MODIFY c GENERATED BY DEFAULT as IDENTITY; 
于 2019-01-03T19:11:08.170 回答
0

所以我确信这更像是一种解决方法,而不是对问题和解决方案的实际理解,但在向导中,我发现:

当您在向导设置中的“表单属性”中时,如下所示:

主键类型:选择 Primark 键列主键列:“您的列”主键列:(我没有在此处输入任何内容)主键源类型:“现有触发器”(这似乎允许身份列在我正在处理的表格/表格上​​做这件事。)。我遇到了同样的问题,我会将其更改为“现有序列”。

如果你知道这一点,我很想知道细节。

需要更多阅读,但这是……

于 2017-02-21T01:00:15.997 回答
0

以下使用可编辑交互式网格为我解决了 ORA-32796 插入问题。我想表格形式也是如此。

  1. 转到相关页面的页面设计器。
  2. 单击“处理”,或单击“组件视图”,然后单击“页面处理”下的进程。对于可编辑交互式网格,它是“保存交互式网格数据”的过程。
  3. 在属性的“插入后返回主键”部分中单击“是”。
  4. 单击保存/运行。
于 2018-01-11T14:36:29.363 回答
0

在对此进行了大量试验之后,如果您想使用 Identity 子句生成顺序数字主键,唯一的选择是使用
BY DEFAULT ON NULL AS IDENTITY
,因为 Apex 在执行自动行处理时会尝试将空值插入 ID 字段。在这种情况下,其他 2 个选项都不能与 Apex 一起正常工作。
其他选项是:
1. 创建一个序列和一个触发器,这不会给 Apex 带来任何问题
2. 使用一个 guid 作为主键

于 2020-04-20T20:35:40.203 回答