我试图在自定义plsql的帮助下使用交互式网格将数据保存到我的表中。我遇到了一个" ORA-01403-没有找到数据"插入数据时出错,我无法弄清楚原因。
这是我运行的plsql自定义进程。感谢您的帮助。
DECLARE
em_id NUMBER;
BEGIN
CASE :apex$row_status
WHEN 'C'
THEN
SELECT NVL (MAX (emergency_id), 0) + 1
INTO em_id
FROM emp_emergency_contact;
INSERT INTO emp_emergency_contact
(emergency_id, emp_id, emergency_name, emergency_relation
)
VALUES (em_id, :emp_id, :emergency_name, :emergency_relation
);
WHEN 'U'
THEN
UPDATE emp_emergency_contact
SET emergency_name = :emergency_name,
emergency_relation = :emergency_relation
WHERE emergency_id = :emergency_id;
WHEN 'D'
THEN
DELETE emp_emergency_contact
WHERE emergency_id = :emergency_id;
END CASE;
END;
答案 0 :(得分:2)
不完全确定。 A'选择进入'可以引发no_data_found异常,但你的不应该。
话虽如此,您的代码中不应该有max(id)+1
。这是一个错误。改为使用序列或标识列。
答案 1 :(得分:2)
到目前为止,我没有遇到任何有关如何使用自定义PL / SQL逻辑通过AJAX调用处理提交的APEX 5.1 Interactive Grid行的文档。
您没有收到任何数据错误,因为预计返回的格式为某种json格式。
您提供的示例不是太复杂,可以使用标准"交互式网格 - 自动行处理(DML)"进程,这是一种AJAX方法。如果AJAX调用不重要,那么您可以使用自定义逻辑创建自己的PL / SQL进程。其示例在" Sample Interactive Grids"包裹申请,退房高级>此应用程序中的“自定义服务器处理”页面以获取更多信息。
我同意Scott的意见,你应该使用id的序列或标识列。
答案 2 :(得分:0)
我已经多次这样做了,所以我要做的第一件事就是去查看我的网格sql中不属于" Save"的任何列,它们来自仅用于数据的连接。 我刚刚得到它,它是一个标题排序列,我作为#34;数字"的列类型。我将其更改为仅显示和"保存"现在有效。 虽然,我已经设置了" Source"列的标题为"仅查询"这也是必要的。
Ajax错误消息至少没有给出导致错误的列名。这是一个让人失望的事。
希望这有助于某人.. BillC
答案 3 :(得分:-1)
插入后添加RETURNING INTO
子句。 IG期望返回主键以查询插入的行。