无法从 Apex 5 按钮执行更新 table 错误提到无法插入 NULL

Unable to do update table from Apex 5 button Error mentions Cannot Insert NULL

宫里的人您好

我在这里运气不好,尝试了很多东西,但似乎无法从需要更新的字段中获取值。

Apex 5 中有 2 个字段,如果值从默认值更改,我想更新它们。 :QUANTITY 是表格形式内的文本字段,而 :DISC 也是同一行中的文本字段。 可以有单行或多行需要更新,这通常是您设置选项 "updated rows and columns only"

的地方

table SALES_TEMP 确实有列 IDNAMEQUANTITY_TO_SELLDISCOUNT.

执行此更新的过程中分配的 PL/SQL 代码如下。

BEGIN
update SALES_TEMP 
set QUANTITY_TO_SELL=:QUANTITY, DISCOUNT=:DISC;
end;

当我尝试更新字段时,它将 return 和

Cannot insert NULL into QUANTITY_TO_SELL

与折扣字段类似。

现在我知道查询没有任何问题,因为如果我这样做:

BEGIN
update SALES_TEMP 
set QUANTITY_TO_SELL='2', DISCOUNT='5';
end;

它实际上更新了 table,但它随后会对 table 中的所有行进行此更新,因为我没有 where 子句。

我查看了不同的选项,但似乎无法找到它不 select 来自字段的数据的原因。我的主要问题是,我有一个完全相同的查询运行正在做一个有效的插入。

也来自 Apex 的 Sql 命令行选项,如果我 运行.

update SALES_TEMP 
set QUANTITY_TO_SELL=:QUANTITY, DISCOUNT=:DISC;

我收到一个请求 :QUANTITY:DISC 值的弹出窗口,然后它更新了列,所以有些东西告诉我这不是从这些文本字段中获取值。

添加填充字段的SQL命令是

select ID, NAME, QUANTITY_TO_SELL as QUANTITY, DISCOUNT as DISC from SALES_TEMP;

显然每个都在顶点中分配为 :ID:NAME:QUANTITY:DISC

  1. 在 Oracle 更新子句中应该总是有 where 子句,因为 oracle 将更新 table 中的所有数据而无需 WHERE 子句。
  2. 当您尝试在 table 属性之一中插入 NULL 时发生无法插入空错误,其中参数设置为 NOT NULL,因此在您的情况下尝试使用 NVL 函数,以避免此问题,我质疑 NAME 属性不应为空。

尝试像这样修改您的代码:

update SALES_TEMP 
set QUANTITY_TO_SELL = :QUANTITY, 
    DISCOUNT = :DISC,
    NAME = nvl(:NAME,'empty')
where ID = :ID;

在这种情况下,它只会更新一列。

Oracle/PLSQL NVL 函数可让您在遇到空值时替换一个值。

鉴于您使用的是表格形式,我建议您确保设置以下内容。

  1. 在过程中(处理中),确保选择了表格形式。

  2. 确保条件 "When button is pressed" 设置为使用您要将此进程分配给的按钮。