无法从 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 确实有列 ID
、NAME
、QUANTITY_TO_SELL
、DISCOUNT
.
执行此更新的过程中分配的 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
。
- 在 Oracle 更新子句中应该总是有 where 子句,因为 oracle 将更新 table 中的所有数据而无需 WHERE 子句。
- 当您尝试在 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 函数可让您在遇到空值时替换一个值。
鉴于您使用的是表格形式,我建议您确保设置以下内容。
在过程中(处理中),确保选择了表格形式。
确保条件 "When button is pressed" 设置为使用您要将此进程分配给的按钮。
宫里的人您好
我在这里运气不好,尝试了很多东西,但似乎无法从需要更新的字段中获取值。
Apex 5 中有 2 个字段,如果值从默认值更改,我想更新它们。 :QUANTITY 是表格形式内的文本字段,而 :DISC 也是同一行中的文本字段。 可以有单行或多行需要更新,这通常是您设置选项 "updated rows and columns only"
的地方 table SALES_TEMP 确实有列 ID
、NAME
、QUANTITY_TO_SELL
、DISCOUNT
.
执行此更新的过程中分配的 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
。
- 在 Oracle 更新子句中应该总是有 where 子句,因为 oracle 将更新 table 中的所有数据而无需 WHERE 子句。
- 当您尝试在 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 函数可让您在遇到空值时替换一个值。
鉴于您使用的是表格形式,我建议您确保设置以下内容。
在过程中(处理中),确保选择了表格形式。
确保条件 "When button is pressed" 设置为使用您要将此进程分配给的按钮。