【小练习】交互式网格自定义增删改错误记录及解决(进行中)

经过之前的学习,已经能创建简单的交互式网格并设置自定义增删改按钮,但是实现上还是存在一些问题,来完善优化一下。

首先是修改,正常修改都会弹出修改框,里面是之前存储的信息,根据实际需要对其进行修改,如何获取对应id的数据就成了问题

获取修改数据

我设想通过列表动态获取

页共享组件→值列表→列表→创建列表→类型 动态【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第1张图片

 在数据库查询一下

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第2张图片

 但是出错了

begin
   select ID,
       NAME,
       GENDER,
       AGE,
       ADDRESS,
       SKILL
from ROLE_INTRODUCTION2 where ID =:P6_ROW_ID;
end;

给了一个SQL查询

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第3张图片

 SQL 查询

输入返回 SQL 查询以生成动态列表的列表 SQL 查询列表或函数。单击示例可查看示例 SQL 查询。

SQL 查询语法:

select level, labelValue label, 
       [targetValue]            target, 
       [is_current]             is_current_list_entry,
       [imageValue]             image, 
       [imageAttributeValue]    image_attribute,
       [imageAltValue]          image_alt_attribute,
       [attribute1]             attribute1,
       [attribute2]             attribute2,
       [attribute3]             attribute3,
       [attribute4]             attribute4,
       [attribute5]             attribute5,
       [attribute6]             attribute6,
       [attribute7]             attribute7,
       [attribute8]             attribute8,
       [attribute9]             attribute9,
       [attribute10]            attribute10
from ...
where ...
order by ...

返回 SQL 查询的函数的语法:

RETURN
'select level, labelValue label,'||
'       [targetValue]         target,'|| 
'       [is_current]          is_current_list_entry,'||
'       [imageValue]          image,'||
'       [imageAttributeValue] image_attribute, '||
'       [imageAltValue]       image_alt_attribute,'||
'       [attribute1]          attribute1,'||
'       [attribute2]          attribute2,'||
'       [attribute3]          attribute3,'||
'       [attribute4]          attribute4,'||
'       [attribute5]          attribute5,'||
'       [attribute6]          attribute6,'||
'       [attribute7]          attribute7,'||
'       [attribute8]          attribute8,'||
'       [attribute9]          attribute9,'||
'       [attribute10]         attribute10'||
'from ...'||
'where ...'||
'order by ...';

注: is_current 列可以设置为以下三个值之一: 'YES''NO' 或 NULL。如果设置为 NULL, 则列表条目的货币将基于列表条目的目标页。

重新写一个

RETURN 'select level, labelValue label,' ||
'       [targetValue]         target,'|| 
'       [is_current]          is_current_list_entry,'||
'       [imageValue]          image,'||
'       [imageAttributeValue] image_attribute, '||
'       [imageAltValue]       image_alt_attribute,'||
'       [name]          name,'||
'       [gender]          gender,'||
'       [age]          age,'||
'       [address]          address,'||
'       [skill]          skill,'||
'from ROLE_INTRODUCTION2'||
'where id =: P6_ROW_ID';

【错误记录】ORA-20001: Query must begin with SELECT or WITH

出现报错

  • ORA-20001: Query must begin with SELECT or WITH

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第4张图片

 对于源类型“返回SQL查询的函数体”,当区域保存在构建器中时,顶点引擎将验证pl/sql块,并检查是否返回有效的查询。因此,如果pl/sql块中有绑定变量(如:P1_DATE),这些变量将无法正确绑定(因为这是在构建器中而不是运行时),并且该块将无法编译。要解决这个问题,请确保所有绑定变量在函数体中都有默认值。

再来一次

select name,
gender,
age,
address,
skill
from ROLE_INTRODUCTION2
where id =: P6_ROW_ID;
验证成功! 

选择区域模板

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第5张图片

 创建动态列表成功!设置模板选项

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第6张图片

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第7张图片

配置 功能:主题样式选择

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第8张图片

 应用上去直接给我寄了

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第9张图片

呈现区域 "test1" 时出错。

请与您的应用程序管理员联系。

技术信息(仅提供给开发人员使用)

  • is_internal_error: true
  • apex_error_code: APEX.REGION.UNHANDLED_ERROR
  • ora_sqlcode: -1008
  • ora_sqlerrm: ORA-01008: 并非所有变量都已绑定 ORA-06512: 在 "APEX_220200.WWV_FLOW_PAGE", line 1932 ORA-06512: 在 "APEX_220200.WWV_FLOW_DISP_PAGE_PLUGS", line 1655 ORA-06512: 在 "APEX_220200.WWV_FLOW_REGION_LIST", line 901 ORA-06512: 在 "APEX_220200.WWV_FLOW_DYNAMIC_EXEC", line 1337 ORA-06512: 在 "SYS.DBMS_SYS_SQL", line 2120 ORA-06512: 在 "SYS.WWV_DBMS_SQL_APEX_220200", line 837 ORA-06512: 在 "APEX_220200.WWV_FLOW_DYNAMIC_EXEC", line 1332 ORA-06512: 在 "APEX_220200.WWV_FLOW_REGION_LIST", line 849 ORA-06512: 在 "APEX_220200.WWV_FLOW_REGION_LIST", line 1049 ORA-06512: 在 "APEX_220200.WWV_FLOW_REGION_LIST", line 1124 ORA-06512: 在 "APEX_220200.WWV_FLOW_REGION_LIST", line 1286 ORA-06512: 在 "APEX_220200.WWV_FLOW_REGION_NATIVE", line 2404 ORA-06512: 在 "APEX_220200.WWV_FLOW_PLUGIN", line 2766 ORA-06512: 在 "APEX_220200.WWV_FLOW_DISP_PAGE_PLUGS", line 1023 ORA-06512: 在 "APEX_220200.WWV_FLOW_DISP_PAGE_PLUGS", line 1584 ORA-06512: 在 "APEX_220200.WWV_FLOW_PAGE", line 1880
  • component.type: APEX_APPLICATION_PAGES
  • component.id: 273000000006
  • component.name: test1
  • error_backtrace:
    ORA-06512: 在 "APEX_220200.WWV_FLOW_PAGE", line 1932
    ORA-06512: 在 "APEX_220200.WWV_FLOW_DISP_PAGE_PLUGS", line 1655
    ORA-06512: 在 "APEX_220200.WWV_FLOW_REGION_LIST", line 901
    ORA-06512: 在 "APEX_220200.WWV_FLOW_DYNAMIC_EXEC", line 1337
    ORA-06512: 在 "SYS.DBMS_SYS_SQL", line 2120
    ORA-06512: 在 "SYS.WWV_DBMS_SQL_APEX_220200", line 837
    ORA-06512: 在 "APEX_220200.WWV_FLOW_DYNAMIC_EXEC", line 1332
    ORA-06512: 在 "APEX_220200.WWV_FLOW_REGION_LIST", line 849
    ORA-06512: 在 "APEX_220200.WWV_FLOW_REGION_LIST", line 1049
    ORA-06512: 在 "APEX_220200.WWV_FLOW_REGION_LIST", line 1124
    ORA-06512: 在 "APEX_220200.WWV_FLOW_REGION_LIST", line 1286
    ORA-06512: 在 "APEX_220200.WWV_FLOW_REGION_NATIVE", line 2404
    ORA-06512: 在 "APEX_220200.WWV_FLOW_PLUGIN", line 2766
    ORA-06512: 在 "APEX_220200.WWV_FLOW_DISP_PAGE_PLUGS", line 1023
    ORA-06512: 在 "APEX_220200.WWV_FLOW_DISP_PAGE_PLUGS", line 1584
    ORA-06512: 在 "APEX_220200.WWV_FLOW_PAGE", line 1880

啊???

删掉刚刚创建的列表就好了,好家伙ORZ

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第10张图片

下午在边做边学习的过程中有了一些灵感:

修改按钮点击后会获取原先数据,数据是从哪里来的?

是在test1的修改按钮→点击修改→执行服务器端的代码   中来的

begin
    apex_util.set_session_state('P3_ROW_ID', :P6_ROW_ID);
end;

【错误记录】ORA-20987- 意外错误, 在应用程序级别或页级别上未找到项名。

改写之后运行报错:

Ajax 调用为Execute Server-Side Code返回了服务器错误ORA-20987: APEX - ERR-1002 在应用程序 "273" 中未找到项 "P3_ROW_ID" 的项 ID。 - 意外错误, 在应用程序级别或页级别上未找到项名。

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第11张图片

解决方法:

 破案了

p3的字段是P3_ID,不是P3_ROW_ID

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第12张图片

 改过来

 还是有错,查了修改缺少返回值

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第13张图片

 P6test1修改行为操作未定义

修改按钮→行为 操作 由动态操作定义→执行验证

【错误记录】ORA-01008: 并非所有变量都已绑定

好像可以获取原值了,但是有新的错误

Ajax 调用为Execute Server-Side Code返回了服务器错误ORA-01008: 并非所有变量都已绑定。

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第14张图片

解决方法:

输入项和返回项要和pl/sql代码上的数据一一对应

创建部门用户权限应用表

1.创建数据表

1.1部门表DEPT_TEST_WXX

1.2创建用户表USER_TEST_WXX

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第15张图片

 1.3创建DEPT_USER_TEST_WXX

中间表DEPT_USER_TEST_WXX【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第16张图片

 为中间表添加外键(至于删除时是级联还是设为空值看实际需要)

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第17张图片

创建结果

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第18张图片

 2.创建交互式网格

2.1部门信息表P26(带表单p27)  P30(单网格 表单p32)

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第19张图片

2.2 用户信息表P2​​​​​​8(带表单p29)  P33(单网格 表单p3)【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第20张图片

 【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第21张图片

初始界面【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第22张图片

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第23张图片

3,相关操作

3.1设置部门名 标识→类型 链接→链接 目标32(部门表单)

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第24张图片

 和主菜单设置跳转链接

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第25张图片

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第26张图片

3.2 创建项(后续数据用得到,行选中、查看是否成功新增删除……)

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第27张图片

 动态操作,新建 行选中,执行JavaScript语句

var map = new Map();

map.set('P30_DEPT_ID', 'DEPT_ID');
utils.set(this.data, map);

console.log($v('P30_DEPT_ID'));

提示为完成无法保存

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第28张图片

 原来是这里没选择【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第29张图片

3.3 还有依次设置部门对应表单修改动态操作

3.3.1执行JavaScript代码(验证必填项都填了)

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第30张图片

 3.3.2执行服务器端代码 

declare
    v_row_count number(10) := 0;

begin
    update DEPT_TEST_WXX set NAME = :P32_NAME, DESCRIBE =: P32_DESCRIBE,UPDATE_DATE = sysdate where DEPT_ID = :P32_DEPT_ID;
    v_row_count := SQL%ROWCOUNT;
    apex_util.set_session_state('P32_ROW_COUNT',v_row_count);
end;

没有的项需要手动创建

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第31张图片

【错误记录】提示ORA_01008:并非所有变量都已绑定

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第32张图片

 原因及解决方法:

创建时间和更新时间是隐藏项

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第33张图片

3.3.3执行JavaScript代码(返回修改成功/失败提示)

if ($v('P32_ROW_COUNT') > 0) {
    alert('修改成功');
    return true;
} else {
    alert('修改失败');
    return false;
}

3.3.4关闭对话框

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第34张图片

部门表单新增同理

服务器端代码

declare
    v_row_count number(10) := 0;
begin
    INSERT INTO DEPT_TEST_WXX(NAME,DESCRIBE,CREATE_DATE,UPDATE_DATE)VALUES(:P32_NAME,:P32_DESCRIBE,sysdate,sysdate);
    v_row_count := SQL%ROWCOUNT;
    apex_util.set_session_state('P32_ROW_COUNT',v_row_count);
end;

 设置完记得保存,转回部门信息表P30

记得设置删改要有ID传入

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第35张图片

△修改要先选中内容,所以涉及一个判断,判断选中的id不为空,判断一次只能选中一个id进行修改,返回真假两种情况,对应情况进行不同操作或提示【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第36张图片

 客户端条件→类型 JavaScript表达式

!utils.checkNull($v('P30_DEPT_ID')) && $v('P30_DEPT_ID').split(',').length == 1

假操作

if (utils.checkNull($v('P30_DEPT_ID'))) {
    alert('请选择修改的数据');
    return false;
}

$v('P30_DEPT_ID').split(',');

if ($v('P30_DEPT_ID').split(',').length > 1) {
    alert('只能修改单条数据');
    return false;
}

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第37张图片

删除前应该有确认提示

删除前验证

if (utils.checkNull($v('P30_DEPT_ID'))) {
    alert('请选择要删除的数据');
    return false;
} else {
    if (confirm('确定要删除选中的数据吗?')) {
        return true;
    } else {
        return false;
    }
}

删除请求后台

DECLARE
    V_COUNT NUMBER(18):=0;
BEGIN
    -- 删除关联的部门用户数据
    DELETE DEPT_USER_TEST_WXX WHERE DEPT_ID IN(SELECT * FROM TABLE(SPLITSTR(:P30_DEPT_ID,',')));
    --删除部门数据
    DELETE DEPT_TEST_WXX WHERE DEPT_ID IN(SELECT * FROM TABLE(SPLITSTR(:P30_DEPT_ID,',')));
    V_COUNT:= SQL%ROWCOUNT;
    APEX_UTIL.SET_SESSION_STATE('P30_ROW_COUNT',V_COUNT);
END;

 删除后验证

if($v('P30_ROW_COUNT')>0){
    alert('删除成功');
}else{
    alert('删除失败');    
    return false;
}

刷新

受影响的元素→  类型 区域    →区域 部门信息表

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第38张图片

往里面添加数据受阻

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第39张图片

原来是处理没有添加,添加处理(点击新增转到表单页)

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第40张图片

【错误记录】ORA-01400: 无法将 NULL 插入

 点击新增,报错

Ajax 调用为Execute Server-Side Code返回了服务器错误ORA-01400: 无法将 NULL 插入 ("YWJA"."DEPT_TEST_WXX"."NAME")。

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第41张图片

 问题分析:

1、数据库中字段值为"非空"类型,而传入的参数为null。

解决办法:

"非空"类型的字段,参数必须传值。

看一眼SQL

CREATE TABLE  "DEPT_TEST_WXX" 
   (	"DEPT_ID" NUMBER NOT NULL ENABLE, 
	"NAME" NVARCHAR2(64) NOT NULL ENABLE, 
	"DESCRIBE" NVARCHAR2(256), 
	"CREATE_DATE" DATE, 
	"UPDATE_DATE" DATE, 
	 CONSTRAINT "DEPT_TEST_WXX_PK" PRIMARY KEY ("DEPT_ID")
  USING INDEX  ENABLE
   )
/

CREATE OR REPLACE EDITIONABLE TRIGGER  "BI_DEPT_TEST_WXX" 
  before insert on "DEPT_TEST_WXX"               
  for each row  
begin   
  if :NEW."DEPT_ID" is null then 
    select "DEPT_TEST_WXX_SEQ1".nextval into :NEW."DEPT_ID" from sys.dual; 
  end if; 
end; 

/
ALTER TRIGGER  "BI_DEPT_TEST_WXX" ENABLE
/

可以看到新建的触发器假设NEW.DEPT_ID为空则从已有数据库中获取.nextval

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第42张图片

 删除触发器试试

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第43张图片

 还是不行

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第44张图片

 再试试方案二

在sql语句上加条件

原先的sql语句

CREATE TABLE  "DEPT_TEST_WXX" 
   (	"DEPT_ID" NUMBER NOT NULL ENABLE, 
	"NAME" NVARCHAR2(64) NOT NULL ENABLE, 
	"DESCRIBE" NVARCHAR2(256), 
	"CREATE_DATE" DATE, 
	"UPDATE_DATE" DATE, 
	 CONSTRAINT "DEPT_TEST_WXX_PK" PRIMARY KEY ("DEPT_ID")
  USING INDEX  ENABLE
   )
/

后来的

在ID后加标红部分

CREATE TABLE "APEX_TEST_DEPT" ( "DEPT_ID" NUMBER GENERATED BY DEFAULT AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE NOT NULL ENABLE, "NAME" NVARCHAR2(64) NOT NULL ENABLE,

"CREATED_BY" NUMBER(20,0) DEFAULT 1,

"CREATION_DATE" DATE DEFAULT sysdate,

"UPDATED_BY" NUMBER(20,0) DEFAULT 1,

"UPDATE_DATE" DATE DEFAULT sysdate,

"REMARK" NVARCHAR2(512),

"PARENT_ID" NUMBER, PRIMARY KEY ("DEPT_ID") USING INDEX ENABLE )

/

改不了一点,受不了辣,重新写一个P37

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第45张图片

 【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第46张图片

 【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第47张图片

 创建交互式网格

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第48张图片

 测试一下新增

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第49张图片

 可以新增,那可以着手自定义增删改了。

先对列进行一些简单的设置

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第50张图片

创建按钮和隐藏项

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第51张图片

设置动态操作

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第52张图片

 处理(页面从交互式网格跳转到表单)

!!!要设置项

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第53张图片

 还有P32的表单,修改这里一定要记得设提交项和返回项啊啊啊!!!!【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第54张图片

 表单修改完数据之后也要记得设置返回项

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第55张图片

 新增也一样

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第56张图片

 【错误记录】

测试出了新的问题

因为一直出错Ajax 调用为Execute Server-Side Code返回了服务器错误ORA-01400: 无法将 NULL 插入 ("YWJA"."DEPT_TEST_WXX"."DEPT_ID")。ora-01400 无法将NULL插入 ID 解决方法https://www.cnblogs.com/newlooker/p/3631177.html为了解决

ORA-01400: 无法将 NULL 插入 

这个问题很多时候是没有为该表建立触发器导致的,或者是序列没建立。于是建了个触发器

-- 建立触发器
CREATE OR REPLACE TRIGGER "TEST_TRI" BEFORE
    INSERT ON DEPT_TEST_WXX
    FOR EACH ROW
BEGIN
    SELECT test_seq.NEXTVAL INTO :NEW.ID FROM DUAL;
END;

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第57张图片

结果新的问题出现了

ORA-04098: 触发器

Ajax 调用为Execute Server-Side Code返回了服务器错误ORA-04098: 触发器 'YWJA.TEST_TRI' 无效且未通过重新验证。

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第58张图片

 自定义sql

select DEPT_ID,
       NAME,
       DESCRIBE,
       CREATE_DATE,
       UPDATE_DATE
from DEPT_TEST_WXX

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第59张图片

 运行还是无法将null插入数据表中

主打一个乱七八糟

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第60张图片

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第61张图片

创建用户信息表

需要手动创建项——所属部门,设置源→类型 数据库列→数据库列 DEPT_NAME→数据类型 varchar2

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第62张图片

 【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第63张图片

【问题记录】选中修改后不会自动刷新返回用户界面,需要手动关闭

【问题记录】每次关闭表单后回到首页而网格不是对应交互式网格

解决方法:

表单关闭后跳转的页码,这里对应其交互式网格【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第64张图片

 

【错误记录】会话状态保护违规: 这可能是因为手动变更了受保护的页项 P37_ROW_COUNT。如果您不确定导致此错误的原因, 请与应用程序管理员联系, 以获取帮助。

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第65张图片

 满头问号???

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第66张图片

部门信息表

将部门 源 类型从“表/视图”改成“SQL查询”

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第67张图片

 自动生成

select DEPT_ID,
       NAME,
       DESCRIBE,
       CREATE_DATE,
       UPDATE_DATE
  from DEPT_TEST_WXX2

选中部门要进行修改,跳转到警告页面

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第68张图片

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第69张图片

ORA-01403: 未找到任何数据

与您的应用程序管理员联系。 通过调试 ID "2128080" 提供有关此意外事件的详细信息。

技术信息(仅提供给开发人员使用)

  • is_internal_error: false
  • ora_sqlcode: 100
  • ora_sqlerrm: ORA-01403: 未找到任何数据 ORA-06512: 在 "APEX_220200.WWV_FLOW_FORM_REGION", line 2299 ORA-06512: 在 "APEX_220200.WWV_FLOW_FORM_REGION", line 2260 ORA-06512: 在 "APEX_220200.WWV_FLOW_FORM_REGION", line 2341 ORA-06512: 在 "APEX_220200.WWV_FLOW_PROCESS_NATIVE", line 1332 ORA-06512: 在 "APEX_220200.WWV_FLOW_PLUGIN", line 3163
  • component.type: APEX_APPLICATION_PAGE_PROCESS
  • component.id: 201420217511504299
  • component.name: 初始化表单 部门信息表_表单
  • association_type: REGION
  • region_id: 201414172851504304
  • error_backtrace:
    ORA-06512: 在 "APEX_220200.WWV_FLOW_FORM_REGION", line 2299
    ORA-06512: 在 "APEX_220200.WWV_FLOW_FORM_REGION", line 2260
    ORA-06512: 在 "APEX_220200.WWV_FLOW_FORM_REGION", line 2341
    ORA-06512: 在 "APEX_220200.WWV_FLOW_PROCESS_NATIVE", line 1332
    ORA-06512: 在 "APEX_220200.WWV_FLOW_PLUGIN", line 3163
    ORA-06512: 在 "APEX_220200.WWV_FLOW_PROCESS", line 170

 【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第70张图片

 报错

Exception in "begin declare
    v_row_count number(10) := 0;
begin
    INSERT INTO DEPT_TEST_WXX2(NAME,DESCRIBE,CREATE_DATE,UPDATE_DATE)VALUES(:P32_NAME,:P32_DESCRIBE,sysdate,sysdate);
    v_row_count := SQL%ROWCOUNT;
    apex_util.set_session_state('P32_ROW_COUNT',v_row_count);
end;
end;":
Error Stack: ORA-01400: 无法将 NULL 插入 ("YWJA"."DEPT_TEST_WXX2"."DEPT_ID")
ORA-06512: 在 line 4
ORA-06512: 在 "SYS.DBMS_SYS_SQL", line 2120
ORA-06512: 在 "SYS.WWV_DBMS_SQL_APEX_220200", line 837
Backtrace: ORA-06512: 在 line 4
ORA-06512: 在 "SYS.DBMS_SYS_SQL", line 2120
ORA-06512: 在 "SYS.WWV_DBMS_SQL_APEX_220200", line 837
ORA-06512: 在 "APEX_220200.WWV_FLOW_DYNAMIC_EXEC", line 2614
ORA-06512: 在 line 4
ORA-06512: 在 "SYS.DBMS_SYS_SQL", line 2120
ORA-06512: 在 "SYS.WWV_DBMS_SQL_APEX_220200", line 837
ORA-06512: 在 "APEX_220200.WWV_FLOW_DYNAMIC_EXEC", line 2614
2

4%

Error: Ajax 调用为Execute Server-Side Code返回了服务器错误ORA-01400: 无法将 NULL 插入 ("YWJA"."DEPT_TEST_WXX2"."DEPT_ID")。
0.00011
Error: Ajax 调用为Execute Server-Side Code返回了服务器错误ORA-01400: 无法将 NULL 插入 ("YWJA"."DEPT_TEST_WXX2"."DEPT_ID")。

将P37设置的 处理→目标类型→PL/SQL Code改为Region Source

begin
    case :APEX$ROW_STATUS
    when 'C' then
        insert into DEPT_TEST_WXX2 ( name,describe,create_date,update_date )
        values ( :NAME, :DESCRIBE, sysdate, sysdate )
        returning dept_id into :P37_DEPT_ID;
    when 'U' then
        update DEPT_TEST_WXX2
           set name  = :NAME,
               describe = :DESCRIBE,
               create_date = sysdate,              
               update_date = sysdate 
         where dept_id  = :P37_DEPT_ID;
    when 'D' then
        delete DEPT_TEST_WXX2
         where dept_id = :P37_DEPT_ID;
    end case;
    
    -- WRITE_LOG( 'P6', 'debug' , 'APEX$ROW_STATUS' || :APEX$ROW_STATUS , -1 , 1 );
end;

【错误记录】ORA-01400: 无法将 NULL 插入 ("YWJA"."DEPT_TEST_WXX2"."DEPT_ID")。

关于报错可以f12查看错误来源,

【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第71张图片

 可以看到设置的输入项和输出项,同时数据data显示undefined【小练习】交互式网格自定义增删改错误记录及解决(进行中)_第72张图片

 

写了一个左连接在用户查询

SELECT ATU.USER_ID AS USER_ID,ATU.NAME as NAME,ATU.GENDER AS GENDER,ATU.REMARK AS REMARK,ATU.UPDATE_TIME,
listagg(ATD.NAME,',') within GROUP (order by ATD.NAME) AS DEPT_NAME 
FROM USER_TEST_WXX ATU
    LEFT JOIN DEPT_USER_TEST_WXX ATDU ON ATU.USER_ID = ATDU.USER_ID
    LEFT JOIN DEPT_TEST_WXX2 ATD ON ATDU.DEPT_ID = ATD.DEPT_ID
group by ATU.USER_ID,ATU.NAME,ATU.GENDER,ATU.REMARK,ATU.UPDATE_TIME

你可能感兴趣的:(数据库)