APEX开发过程中需要注意的小细节3

【问题记录】在编辑数据信息时发现辩护的数据无法保存,提示

“ORA-01799: 列不能外部联接到子查询”

仅展示的数据来自主表,这部分都是关联子表重点内容,编辑时无法保存

于是想将扩展表作为主表,在主表进行修改试试

新的报错:

ORA-01779: 无法修改与非键值保存表对应的列

看来单表可以使用Oracle APEX原生的联表增删改只能手敲SQL

【问题记录】展示的是主表数据,关联扩展子表无数据,点击编辑会报错,究其原因,编辑的是子表最新一条数据,子表无数据自然查不到了

【解决方法】新建项,给编辑按钮加上条件,判断子表有数据则显示编辑按钮

项-源-类型“SQL查询”(返回单个值)-已使用“始终替换会话状态中的任何现有值”

给编辑入口添加标识符P261_IS_DATA
select COUNT(PLATFORM_DEMAND_HIS_ID)
from DIGITAL_PLATFORM_DEMAND Dleft join DIGITAL_PLATFORM_DEMAND_HIS Hon D.PLATFORM_DEMAND_ID = H.PLATFORM_DEMAND_IDand D.TENANT_ID = H.TENANT_ID
where H.PLATFORM_DEMAND_ID = :P261_PLATFORM_DEMAND_ID
order by H.PLATFORM_DEMAND_HIS_ID desc;

判断子表有数据则显示编辑按钮

想要显示/隐藏的按钮-服务器端条件-类型 “项不为零”-项 “P261_IS_DATA”

效果如图所示:

没有子表记录就不显示编辑按钮

有子表记录就显示编辑按钮

同理,想要根据用户身份控制需求等级字段的显示/隐藏,新增一个标帜项P271_IS_SHOW

select distinct count(1)  from DIGITAL_USER_GROUP_DETAILS
where upper(USER_ID) = upper(:U_ID)
and USER_GROUP_ID in (300018,300121,300120);

【开发小技巧】多个条件合并成一个

之前提到创建项并根据项值判断是否展示按钮/项值/页面,但是如果要判断多个条件,直接判断单项显然不够,这里有两个方案,表达式函数体,点击要设置条件的按钮- 服务器端条件- 类型 “表达式”   语言“PL/SQL”  PL/SQL表达式 (将新建的条件项作为判断写入)

(:P261_IS_DATA != 0 and :P261_IS_SHOW != 0 and :P261_IS_EDIT != 0)

(:P261_IS_DATA != 0 and :P261_IS_SHOW != 0 and :P261_IS_EDIT != 0)
新建项P261_IS_DATA   项-源-类型“SQL查询”(返回单个值)-已使用“始终替换会话状态中的任何现有值”
select COUNT(PLATFORM_DEMAND_HIS_ID)
from DIGITAL_PLATFORM_DEMAND Dleft join DIGITAL_PLATFORM_DEMAND_HIS Hon D.PLATFORM_DEMAND_ID = H.PLATFORM_DEMAND_ID--    and D.TENANT_ID = H.TENANT_ID
where H.PLATFORM_DEMAND_ID = :P261_PLATFORM_DEMAND_ID
order by H.PLATFORM_DEMAND_HIS_ID desc;P261_IS_SHOW
select distinct count(1)  from DIGITAL_USER_GROUP_DETAILS
where upper(USER_ID)  = upper(:U_ID)
and USER_GROUP_ID in (300018,300121,300120);P261_IS_EDIT
select distinct count(1)  from DIGITAL_USER_GROUP_DETAILS
where upper(USER_ID)  = upper(:U_ID)
and USER_GROUP_ID in (300018,300120);

【问题记录】使用APEX原生交互式网格编辑报错

  • ORA-01799: 列不能外部联接到子查询

  •  ORA-02014: 不能从具有 DISTINCT, GROUP BY 等的视图选择 FOR UPDATE

破案了

【交互式网格】使用了共享组件,类型无法设置为“仅显示”问题的解决

对应的项-只读 设置为“始终”  执行“每一行”

效果

在函数里套函数

场景:

需求负责人有的带工号,有的不带工号,要求全都不带工号

逻辑1.0:

业务方提报需求的时候会有一个需求负责人,扩展表在需求更新中也会更新需求负责人,在展示时优先展示扩展表中的数据,当扩展表中无需求负责人数据时会展示主表数据

COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON) AS OWNER
COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON) AS OWNER  --需求负责人

 

对应代码:

select * from (
select D.PLATFORM_DEMAND_ID, --需求idD.DEMAND_TITLE,       --需求名称D.INITIATOR_NAME,--提出人D.DEMAND_CONTENT,--需求描述D.INITIATOR_DEPT_NAME,--业务提出方D.IS_SHOW,--是否在需求进度中展示 1展示  0不展示H.DEMAND_GRADE,--需求等级H.DEMAND_CP,--业务对接人COALESCE(H.DEMAND_OWNER,D.CHARGE_PERSON) AS OWNER,  --需求负责人H.PROGRESS,--进度COALESCE(H.STATUS,D.STATUS) AS STATUS,  --状态H.CREATED_BY,--创建人H.CREATION_DATE,--创建时间H.UPDATED_BY,--更新人(用户ID)H.UPDATOR,--更新人(文本)H.UPDATED_DATE--更新时间
from DIGITAL_PLATFORM_DEMAND Dleft join (select * from (select rank() over (partition by s.PLATFORM_DEMAND_ID order by PLATFORM_DEMAND_HIS_ID desc ) rn,s.PLATFORM_DEMAND_HIS_ID,s.PLATFORM_DEMAND_ID,s.TENANT_ID,s.DEMAND_GRADE,s.DEMAND_CP,s.DEMAND_OWNER,s.PROGRESS,s.STATUS,s.IS_UPGRADE,s.UPDATOR,s.CREATED_BY,s.CREATION_DATE,s.UPDATED_BY,s.UPDATED_DATE,s.DEL_FLAGfrom DIGITAL_PLATFORM_DEMAND_HIS swhere s.DEL_FLAG = 0) where rn=1) Hon D.PLATFORM_DEMAND_ID = H.PLATFORM_DEMAND_ID
--    and D.TENANT_ID = H.TENANT_IDwhere D.SOURCE = 'PLATFORM' --中心级需求and to_char(D.CREATED_DATE, 'yyyy') = '2024'and D.DEL_FLAG = 0)

逻辑2.0:

出现( 时截取,截取括号前的人名

SELECT SUBSTR(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), 1,INSTR(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), '(') - 1) AS result --只截取有(的数据
select D.PLATFORM_DEMAND_ID,                                          --需求idD.DEMAND_TITLE,                                                   --需求名称
SUBSTR(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), 1,INSTR(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), '(') - 1) AS result --只截取有(的数据
​​​​​​​from DIGITAL_PLATFORM_DEMAND Dleft join DIGITAL_PLATFORM_DEMAND_HIS Hon D.PLATFORM_DEMAND_ID = H.PLATFORM_DEMAND_ID--    and D.TENANT_ID = H.TENANT_IDand H.PLATFORM_DEMAND_HIS_ID =(select MAX(e.PLATFORM_DEMAND_HIS_ID)from DIGITAL_PLATFORM_DEMAND_HIS ewhere e.PLATFORM_DEMAND_ID = D.PLATFORM_DEMAND_ID);

缺点是只能截取有( 的数据,之前没有工号的数据直接不截取也不显示

逻辑3.0:

在最外面再套一层DECODE()函数,DECODE()函数里加一个函数来判断( 出现次数

select (length('10,CLARK,MANAGER')-length(replace('10,CLARK,MANAGER',',','')))/length(',') as result from dual; --返回结果2
-- 1、统计字符出现次数 -- 如:统计以下字符串逗号出现次数 -- 字符串的总长度减去去掉逗号之后的字符串长度,就得到了逗号的个数, -- 第 1 行调用 LENGTH 函数获取字符串总长 ,第 2 行仍然调用 LENGTH 函数获取不含逗号的字符串长度,而逗号的删除则借助了REPLACE 函数 -- 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 -- 原文链接:https://blog.csdn.net/jungeCSND/article/details/123875365

select decode((length(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON)) -length(replace(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), '(', ''))) / length('('), 0, '没有工号', 1,'有工号')

若为0则没有工号,执行逻辑1.0;为1则有工号,执行逻辑2.0。

select decode((length(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON)) -length(replace(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), '(', ''))) / length('('), 0, COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), 1,SUBSTR(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), 1,INSTR(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), '(') - 1)) AS OWNERS,  --真正的需求负责人
select decode((length(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON)) -length(replace(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), '(', ''))) / length('('), 0, COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), 1,SUBSTR(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), 1,INSTR(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), '(') - 1)) AS OWNERS,  --真正的需求负责人

代码:

--DESCRIBE:P232 需求概览去除需求负责人工号
select D.PLATFORM_DEMAND_ID,                                                       --需求idD.DEMAND_TITLE,                                                             --需求名称COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON)                         AS OWNER, --需求负责人
--        SUBSTR(COALESCE(H.DEMAND_OWNER,D.CHARGE_PERSON),1,instr(COALESCE(H.DEMAND_OWNER,D.CHARGE_PERSON),'(',-1))OWNER2,decode((length(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON)) -length(replace(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), '(', ''))) / length('('), 0, '没有工号', 1,'有工号'),decode((length(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON)) -length(replace(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), '(', ''))) / length('('), 0, COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), 1,SUBSTR(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), 1,INSTR(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), '(') - 1)) AS OWNERS,  --真正的需求负责人SUBSTR(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), 1,INSTR(COALESCE(H.DEMAND_OWNER, D.CHARGE_PERSON), '(') - 1) AS result --只截取有(的
from DIGITAL_PLATFORM_DEMAND Dleft join DIGITAL_PLATFORM_DEMAND_HIS Hon D.PLATFORM_DEMAND_ID = H.PLATFORM_DEMAND_ID--    and D.TENANT_ID = H.TENANT_IDand H.PLATFORM_DEMAND_HIS_ID =(select MAX(e.PLATFORM_DEMAND_HIS_ID)from DIGITAL_PLATFORM_DEMAND_HIS ewhere e.PLATFORM_DEMAND_ID = D.PLATFORM_DEMAND_ID);

【出现问题】筛选展示列的时候只能看到部分字段,无法看到全部

【问题原因】未打开该项的“排序”等

【问题解决】找到对应的项,在 列 -“使用户可以 ”  打开排序,就可以看到该条件

【小技巧】获取当前时间的两种方式

方式一:选中项-默认值 SQL表达式     select sysdate from dual

方式二:选中项-默认值 函数题 :sysdate  

【小技巧】使用自定义编辑后页面设置刷新失败

原:

使用 动态操作 时间  事件-对话框已关闭 选择类型-JavaScript表达式 JavaScript表达式-window 真操作 刷新

新:

使用 动态操作 时间  事件-对话框已关闭 选择类型-区域 区域-需求详情  真操作 执行JavaScript代码  设置 代码- window.location.reload()

【问题记录】明明有值但是新加了需求方对接人就报错

  • ORA-02014: 不能从具有 DISTINCT, GROUP BY 等的视图选择 FOR UPDATE
  • 解决方法:为表中的项添加别名

  • 在用户开始更新过程以后, 数据库中数据的当前版本已经更改。

学到了了测试方法: 

sql报错处理:ora-01722:invalid number_ora01722无效数字报错-CSDN博客

-- 检查您的数据库中是否存在无法转换为数字的字符串值,记得将【】换成英文’[]’
SELECT mycolumn
FROM mytable
WHERE REGEXP_LIKE(mycolumn, '[^0-9]');

正常转换:

无法正常转换:

好像知道怎么个事儿了,STATUS状态在数据库里存的是number类型,0和1表示状态,但是apex中存的是文本字段,自然冲突

破案了,是STATUS类型转换有问题

修改后

修改成功

【问题记录】

长文本长度过长无法完全展示

【解决方法】

设置CSS样式

参考

oracle apex 交互式网格自动换行_oracle自动换行-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_45808673/article/details/133992353

/* 悬浮样式 */
.longlinedots{max-width: 900px;	/*设置容器最大宽度*/white-space: nowrap;	/* 设置段落文本不换行(不换行才有可能行溢出)*/overflow: hidden;		/* 关闭滚动条,超出部分隐藏*/text-overflow: ellipsis;	/* 超出部分添加省略号*/
}
/*给该选择器添加悬浮事件,实现悬浮显示全部内容*/
.longlinedots:hover {overflow: visible;white-space: inherit;
}/* 直接显示为换行 */
.a-GV-table td  {word-wrap: break-word;overflow-wrap: break-word;overflow: initial;white-space: initial;text-overflow: initial;
}

效果展示:

通过CSS设置文本内容自适应换行

交互式网格编辑报错

【开发方法】图表默认未选择条件时默认展示所有

之前的做法是给两个筛选条件设置默认值,展示默认数据

默认条件一:专项

默认条件二:P0

代码:

select 
"project_owner",
COUNT("project_owner") 数量
from jas_project_masterwhere 
to_char("start_date",'yyyy') = '2024'
and "project_class" = :P205_CONDITION_1
and "important_grade" = :P205_CONDITION_2
GROUP BY "project_owner"
ORDER BY 数量 desc

改造后:条件项不用给默认值

代码:

select
"project_owner",
COUNT("project_owner") 数量
from jas_project_masterwhere
to_char("start_date",'yyyy') = '2024'
and ("project_class" = :P205_CONDITION_1 or nvl(:P205_CONDITION_1 ,'ALL') ='ALL')
and ("important_grade" = :P205_CONDITION_2 or nvl(:P205_CONDITION_2 ,'ALL') ='ALL')
GROUP BY "project_owner"
ORDER BY 数量 desc;

关键函数:

NVL()

直接在条件中做判断,若是为空则默认全选

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/730469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#实现归并排序算法

C#实现归并排序算法 以下是 C# 中的归并排序算法实现示例: using System;class MergeSortAlgorithm {// 合并两个子数组static void Merge(int[] arr, int left, int mid, int right){// 计算左子数组和右子数组的长度int n1 mid - left 1;int n2 right - mid;/…

C语言从入门到精通 第十二章(程序的编译及链接)

写在前面: 本系列专栏主要介绍C语言的相关知识,思路以下面的参考链接教程为主,大部分笔记也出自该教程。除了参考下面的链接教程以外,笔者还参考了其它的一些C语言教材,笔者认为重要的部分大多都会用粗体标注&#xf…

读《文明之光》第1册总结

人类几千年的文明史和地球的历史相比,实在是太短暂了,大约相当于几分钟和一年的关系。人类已经走过的路,相比今后要走的漫漫长路,只能算是刚刚起步。如果跳出一个个具体事件,站在历史的高度去看,我们会发现…

支小蜜校园防欺凌系统听到声音之后会自动识别吗

在校园安全领域,特别是在预防和应对欺凌问题上,校园防欺凌系统作为新兴的技术应用,正在受到越来越多的关注和探索。那么当这样的系统听到声音之后,它是否能够自动识别并作出相应反应呢?本文将围绕这一问题展开探讨。 …

Python通过SFTP实现网络设备配置备份

一、背景 为了防止网络设备意外损坏,导致配置文件无法恢复,可以通过将网络设备的配置文件备份到本地电脑上。 一般情况下,设备支持通过FTP、TFTP、FTPS、SFTP和SCP备份配置文件。其中使用FTP和TFTP备份配置文件比较简单,但是存在…

K线实战分析系列之十八:十字线——判断行情顶部的有效信号

K线实战分析系列之十八:十字线——判断行情顶部的有效信号 一、十字线二、十字线总结三、三种特殊十字线四、长腿十字线五、墓碑十字线六、蜻蜓十字线七、特殊十字线总结 一、十字线 重要的反转信号 幅度较大的下跌,出现一根十字线,正好是在…

编译内核错误 multiple definition of `yylloc‘

编译内核错误 # make ARCHarm CROSS_COMPILEarm-mix410-linux- uImageHOSTLD scripts/dtc/dtc /usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss0x10): multiple definition of yylloc; scripts/dtc/dtc-lexer.lex.o:(.bss0x0): first defined here collect2: error: ld ret…

【Lazy ORM】 小工具 acw 本地客户端 你负责点击页面,他负责输出代码

介绍 wu-smart-acw-client 简称acw-client&#xff0c;是一个基于Lazy ORM定制的客户端代码生成小工具 Lazy ORM 小工具 acw 本地客户端 你负责点击页面&#xff0c;他负责输出代码安装 <dependency><groupId>top.wu2020</groupId><artifactId>wu-sma…

数据结构——lesson7二叉树 堆的介绍与实现

前言&#x1f49e;&#x1f49e; 啦啦啦~这里是土土数据结构学习笔记&#x1f973;&#x1f973; &#x1f4a5;个人主页&#xff1a;大耳朵土土垚的博客 &#x1f4a5; 所属专栏&#xff1a;数据结构学习笔记 &#x1f4a5;对于数据结构顺序表链表有疑问的都可以在上面数据结…

第四届信息通信与软件工程国际会议(ICICSE 2024)即将召开!

2024年第四届信息通信与软件工程国际会议&#xff08;ICICSE 2024&#xff09;将于2024年5月10-12日在中国北京举办。本次会议由北京工业大学、IEEE以及Comsoc 联合主办。随着当今社会信息化的高速发展&#xff0c;电子信息技术的应用更是随处可见。其中&#xff0c;信息通信与…

备份 ChatGPT 的聊天纪录

备份 ChatGPT 的聊天纪录 ChatGPT 在前阵子发生了不少次对话纪录消失的情况&#xff0c;让许多用户觉得困扰不已&#xff0c;也担心自己想留存的聊天记录消失不见。 好消息是&#xff0c;OpenAI 在 2023 年 4 月 11 日推出了 ChatGPT 聊天记录备份功能&#xff0c;无论是免费…

Redis什么这么快和Redis单线程模型和多线程

概述 1、完全基于内存&#xff0c;绝大部分请求是纯粹的内存操作&#xff0c;非常快速。数据存在内存中&#xff0c;类似于HashMap&#xff0c;HashMap的优势就是查找和操作的时间复杂度都是O(1)&#xff1b; 2、数据结构简单&#xff0c;对数据操作也简单&#xff0c;Redis中…

二叉树入门

这篇博客通过手动创建的一个简单二叉树&#xff0c;实现二叉树遍历&#xff0c;返回节点&#xff0c;叶子个数&#xff0c;查找结点等相关操作。 1. 二叉树的概念 二叉树不为空时&#xff0c;由根节点&#xff0c;左/右子树组成&#xff0c;逻辑结构如下&#xff0c;当二叉树…

Postman(注册,使用,作用)【详解】

目录 一、Postman 1. Postman介绍 2. 安装Postman 3. 注册帐号再使用(可保存测试记录) 4. 创建workspace 5. 测试并保存测试记录 一、Postman postman工具可以发送不同方式的请求,浏览器只能发送get请求(所有用这个工具) 在前后端分离开发模式下&#xff0c;前端技术人员…

Spring Boot中SQL语句报错

报错原因&#xff1a; You have an error in your SQL syntax 你的SQL语句出现错误 报错位置&#xff1a; check the manual that corresponds to your MySQL server version for the right syntax to use near :/sql/schema.sql.t_film at line 1 在:/sql/schema.sql附近使用…

主网NFT的发布合约

1.什么是nft? NFT:Non-fungible-token 非同质化货币 2.新建suimove项目 使用sui move new 项目名命令新建sui move项目 sui move new nft_qyx项目结构如下: 3.写nft合约 module qyx123::nft{use sui::object::{Self, UID};use sui::transfer;use sui::tx_context::{Sel…

【工具】Raycast – Mac提效工具

引入 以前看到同事们锁屏的时候&#xff0c;不知按了什么键&#xff0c;直接调出这个框&#xff0c;然后输入lock屏幕就锁了。 跟我习惯的按Mac开机键不大一样。个人觉得还是蛮炫酷的&#xff5e; 调研 但是由于之前比较繁忙&#xff0c;这件事其实都忘的差不多了&#xff0…

JVM-垃圾收集底层算法实现

三色标记 背景描述 在并发标记的过程中&#xff0c;因为标记期间应用线程还在继续跑&#xff0c;对象间的引用可能发生变化&#xff0c;多标和漏标的情况就有可能发生。 如何解决上面的问题&#xff1f; 引入“三色标记” 意思就是&#xff0c;把Gcroots可达性分析遍历对象过程…

BUUCTF---[MRCTF2020]你传你呢1

1.题目描述 2.打开题目链接 3.上传shell.jpg文件&#xff0c;显示连接成功&#xff0c;但是用蚁剑连接却连接不上。shell文件内容为 <script languagephp>eval($_REQUEST[cmd]);</script>4.用bp抓包&#xff0c;修改属性 5.需要上传一个.htaccess的文件来把jpg后缀…

[递归、搜索、回溯]----递归

前言 作者&#xff1a;小蜗牛向前冲 专栏&#xff1a;小蜗牛算法之路 专栏介绍&#xff1a;"蜗牛之道&#xff0c;攀登大厂高峰&#xff0c;让我们携手学习算法。在这个专栏中&#xff0c;将涵盖动态规划、贪心算法、回溯等高阶技巧&#xff0c;不定期为你奉上基础数据结构…