存档&改造【05】通过视图实现多表联查&理清级联层级关系&对字段的唯一约束

在之前的列表展示中,只是粗略地将数据展示出来,但是其中的关系并没有真正理解,而后续无论是字段内容展示效果也好,级联筛选也好,都离不开理解其中关系这一步。

PDManer中的数据模型关系图能很好地帮助理清其中的连接和关系,

设备关系图

操作设置关系图

介于关系表太多,将有效字段通过多表连接的视图串联起来就能方便很多了,

sql 复制代码
-- 地图-区域视图
select * from fnd_maps_areas_asso_v;

-- 查区域
SELECT DISTINCT MAP_AREA_X_NAME AS AREA_NAEM,MAP_AREA_X_ID AS AREA_ID
FROM FND_MAPS_AREAS_ASSO_V
WHERE TENANT_ID = 2 AND FAB_ID =2
ORDER BY MAP_AREA_X_ID ASC;

-- 查产线
SELECT DISTINCT MAP_AREA_Y_NAME AS LINE_NAME ,MAP_AREA_Y_ID AS LINE_ID
FROM FND_MAPS_AREAS_ASSO_V
WHERE TENANT_ID = :USERTENANT AND FAB_ID =:FAB_ID
ORDER BY MAP_AREA_Y_ID ASC;

查到的区域ID和对应NAME

应用到程序中

【待解决的情况】厂区都能找到,但是区域和产线找不到

区别在于FAB_ID是在FND_FAB表上查到的,而AREA_NAEM、AREA_ID、LINE_NAME、 LINE_ID是在视图FND_MAPS_AREAS_ASSO_V上查到的。

【问题记录】ERR-1002 在应用程序 "277" 中未找到项 "FAB_ID" 的项 ID

查看会话发现是FAB_ID未传参到查询中

我悟了:因为新增还未保存,所以此时通过FAB_ID为条件筛选查区域和产线当然查不到了,但是从已有数据中查为什么还是没有啊???

【问题解决】破案了,除了查询语句要加上关系,级联值列表也要加上父列

成功了

同理使事件大小类也适用

但是使用原生新增是出现报错

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

【问题原因】租户没有设置默认值
【解决方案】给租户设置默认值

项"TENANT_ID"→【默认值】→【类型】表达式→ 【PL/SQL表达式】:USERTENANT

这样就可以新增了。

【待解决的问题】保持DEVICE_CODE的唯一性,要做校验

明明在提交后设置了校验,但是完全没发挥作用,编码居然可以重复

【问题解决】在对应表DDL(数据定义语言)新增唯一约束

create unique index CODE_DEVICE_DEVICE_CODE_UINDEX on CODE_DEVICE (DEVICE_CODE)

效果展示:

相关推荐
Joeysoda3 小时前
MySQL 基础学习(1):数据类型与操作数据库和数据表
数据库·mysql·oracle·database
limts12 小时前
Oracle之Merge into函数使用
数据库·oracle
胖头鱼的鱼缸(尹海文)13 小时前
数据库管理-第287期 Oracle DB 23.7新特性一览(20250124)
数据库·oracle
叶枫^_^20 小时前
记录java常用方法
java·开发语言·oracle
天农学子1 天前
Oracle 创建用户和表空间
数据库·oracle
Zda天天爱打卡1 天前
【趣学SQL】第七章:SQL 实战案例 7.1 电商系统中的 SQL 优化——从“双十一崩库“到“丝滑秒杀“的逆袭之路
数据库·sql·oracle
leegong231111 天前
PostgreSQL中级专家是什么意思?
数据库·postgresql·oracle
silver6871 天前
Oracle之开窗函数使用
oracle
Zda天天爱打卡1 天前
【趣学SQL】第六章:SQL 高级应用 6.2 数据库备份与恢复——让数据在“世界末日“也能重生的终极指南
数据库·sql·oracle
jcsx1 天前
在Docker 容器中安装 Oracle 19c
docker·oracle·容器