Ajax调用返回服务器错误ORA-01403:未找到APEX Interactive Grid的数据

时间:2017-03-13 12:21:50

标签: oracle-apex oracle-apex-5.1

我试图在自定义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;

4 个答案:

答案 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期望返回主键以查询插入的行。