【小练习】交互式网格自定义增删改(进行中)

news2024/12/23 13:46:15

学习SQL和PLISQL数据类型的区别和应用场景

Oracle plsql 基础篇1 数据类型以及流程控制_bb_tarek的博客-CSDN博客https://blog.csdn.net/bb_tarek/article/details/17555713?ops_request_misc=&request_id=&biz_id=102&utm_term=plsql%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E5%92%8C%E5%BA%94%E7%94%A8%E5%9C%BA%E6%99%AF&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-17555713.142%5Ev92%5Econtrol&spm=1018.2226.3001.4187

plsql基础学习--二、PLSQL类型_plsql long类型_罗小树的博客-CSDN博客https://blog.csdn.net/u010999809/article/details/82421830

PL/SL存储过程调用和函数

交互式网格自定义增删改

行选中

var map =  new Map();

map.set('P6_ROW_ID','ID');
utils.set(this.data,map);

console.log('行选中:' + $v('P6_ROW_ID'));

 【错误记录】oracleapex 出现 1 个错误 在用户开始更新过程以后, 数据库中数据的当前版本已经更改

在用pl/sql控制交互式网格实现自定义增删改出现问题如下

 百思不得其解,后来蒋老师点出来是数据库数据未同步,需要手动刷新数据库更新数据,

 最后成功实现pl/sql自定义交互式网格增删改!

更改的内容:

 代码如下:

begin
    case :APEX$ROW_STATUS
    when 'C' then
        insert into ROLE_INTRODUCTION2 ( name,gender,age,address,skill )
        values ( :NAME, :GENDER, :AGE, :ADDRESS, :SKILL )
        returning id into :ID;
    when 'U' then
        update ROLE_INTRODUCTION2
           set name  = :NAME,
               gender = :GENDER,
               age = :AGE,
               address = :ADDRESS,
               skill = :SKILL 
         where id  = :ID;
    when 'D' then
        delete ROLE_INTRODUCTION2
         where id = :ID;
    end case;
    
    -- WRITE_LOG( 'P6', 'debug' , 'APEX$ROW_STATUS' || :APEX$ROW_STATUS , -1 , 1 );
end;


更多细节

实现功能以后还需要更多细节:

自定义增删改的按钮/设置超链接在对应数据上(点击用户名就可以进行修改之类的);

增删改之后要能自动刷新数据库(java中是查询数据库,apex应该也同理)。

以及条件校验,比如

性别只能是“男”“女”/或者做成下拉框;

年龄不得大于130、不得小于0……

创建值列表

为了方便进行选值,创建了值列表,可以选择工作状态——未开始,进行中,已完成,已逾期

共享组件→值列表→创建→定义名称→类型 Static→输入显示值和返回值→创建值列表

 批量删除相关代码

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

设置按钮

页设计器→Region Body→创建新按钮→标识 按钮名 

在布局中设置列和列跨距

 设置服务器端代码

declare
    V_COUNT number(18) := 0;
 begin
    --删除用户数据
    DELETE ROLE_INTRODUCTION2 where ID IN(SELECT * FROM TABLE(SPLITSTR(:P6_ROW_ID,',')));
    V_COUNT := SQL%ROWCOUNT;
    APEX_UTIL.SET_SESSION_STATE('P6_ROW_COUNT',V_COUNT);    
 end;

返回值可以自己创建

Region Body→右键 创建项→标识 名称(自定义)类型(隐藏)

创建列表

 要在交互式网格中新增,需要跳转一个新增表单

先设计一个表单,设置校验(数据不为空)

if ($v('P3_NAME').length == 0 || $v('P3_GENDER').length == 0 || $v('P3_AGE').length == 0 || $v('P3_ADDRESS').length == 0 || $v('P3_SKILL').length == 0 ) {
    alert('数据未填完');
    return false;
}

修改服务器端代码

declare
    v_row_count number(20) := 0;

begin    
    update ROLE_INTRODUCTION2 set NAME =: P3_NAME,GENDER =:P3_GENDER,AGE =:P3_AGE,ADDRESS =:P3_ADDRESS,SKILL =:P3_SKILL where ID =:P3_ID;
    v_row_count := SQL%ROWCOUNT;
    apex_util.set_session_state('P3_ROW_COUNT',v_row_count);
end;

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

会冒出来警告

  • ORA-01008: 并非所有变量都已绑定

 “ORA-01008: 不是所有变量都绑定”错误通常出现在执行预编译的SQL语句时。该错误表示在SQL语句中找不到所有需要绑定的变量。这通常是因为绑定变量的数量与SQL语句中的变量数量不匹配,或者在执行SQL语句之前未正确绑定变量。

解决方法:

1. 检查绑定变量的数量和顺序

2. 检查是否正确绑定了所有变量

3. 检查是否使用了正确的变量名

记得输入的值和返回值

 

新增服务器端代码

declare
    v_row_count number(10) := 0;

begin    
    INSERT INTO ROLE_INTRODUCTION2(NAME,GENDER,AGE,ADDRESS,SKILL)VALUES(:P3_NAME,:P3_GENDER,:P3_AGE,:P3_ADDRESS,:P3_SKILL);
    v_row_count := SQL%ROWCOUNT;
    apex_util.set_session_state('P3_ROW_COUNT',v_row_count);
end;

新增有表单出来了,但是新增失败了

 啊???

先去数据库查看数据有没有写入

数据未写入

去还有一件事(老爹附体),在P3 的表单页中,没有输入值和返回值

  创建的查询语句也有问题

【错误记录】ORA-02014

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

正常处理方法和步骤:

1. 首先,需要确保执行的查询是正确的。

2. 然后,可以考虑替换查询中的UNION、GROUP BY或DISTINCT子句以使用JOIN,以避免ORA-02014错误的发生。

3. 也可以尝试在查询的SELECT子句中进行更改,以允许对类似视图的功能Table的更新

4. 最后,应该停用VIEW并尝试避免更新或检查对视图功能表的影响。

 问题是代码根本找不到QAQ

小技巧:可以点击右侧小图标,里面有出错位置

终于找到了,在p6的“处理”→test-增删改交互式网格数据

重新写了一个 改过来就好了

SELECT ID,NAME,GENDER,AGE,ADDRESS,SKILL
FROM ROLE_INTRODUCTION2

小结:

  • 一定要细心,每一个不起眼的小细节都有可能影响最终结果,所以在编码开发中一定要注意细节;
  • 遇到前台没有返回数据,先去数据库查看是否成功存入,如果数据库查不到数据,说明一开始存储就有问题,如果数据库有数据就说明是前端传入有误。

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

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

相关文章

9.异常

文章目录 9.1 Java 异常类层次结构图9.2 Throwable 类常用方法9.3 try-catch-finally9.4使用 try-with-resources 来代替try-catch-finally 9.1 Java 异常类层次结构图 在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。Throwable 类有两个…

CentOS安装Postgresql

PG基本安装步骤 安装postgresql: sudo yum install postgresql-server初始化数据库:安装完毕后,需要初始化数据库并创建初始用户: sudo postgresql-setup initdb启动和停止服务: sudo systemctl start postgresql sudo…

06微服务间的通信方式

一句话导读 微服务设计的一个挑战就是服务间的通信问题,服务间通信理论上可以归结为进程间通信,进程可以是同一个机器上的,也可以是不同机器的。服务可以使用同步请求响应机制通信,也可以使用异步的基于消息中间件间的通信机制。同…

【TS第三讲】完善TS开发环境

文章目录 🌟 写在前面🌟 ts-node🌟 nodemon🌟 nodemon文件类型🌟 nodemon文件范围🌟 写在最后 🌟 写在前面 🔥探索TypeScript世界,驭Vue3Ts潮流,开启前端之旅…

【Ubuntu】简化反向代理和个性化标签页体验

本文将介绍如何使用Docker部署Nginx Proxy Manager和OneNav,两个功能强大且易用的工具。Nginx Proxy Manager用于简化和管理Nginx反向代理服务器的配置,而OneNav则提供个性化的新标签页体验和导航功能。通过本文的指导,您将学习如何安装和配置…

【打印整数二进制的奇数位和偶数位】

打印整数二进制的奇数位和偶数位 1.题目 获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列 2.题目分析 打印一个整数的二进制位中的偶数位和奇数位,可以对整数进行移位操作,再将移位的二进制位与1进行&操作。 按位&a…

HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制概述

ArkUI通过自定义组件的build()函数和builder装饰器中的声明式UI描述语句构建相应的UI。 在声明式描述语句中开发者除了使用系统组件外,还可以使用渲染控制语句来辅助UI的构建,这些渲染控制语句包括控制组件是否显示的条件渲染语句,基于数组数…

Rocky Linux更换为国内源

Rocky Linux提供的可供切换的源列表:Mirrors - Mirror Manager 其中以 COUNTRY 列为 CN 的是国内源。 选择其中一个Rocky Linux 源使用帮助 — USTC Mirror Help 文档 操作前请做好备份 对于 Rocky Linux 8,使用以下命令替换默认的配置 sed -e s|^mirr…

Java用方法实现登录名和密码的校验

Java用方法实现登录名和密码的校验 需求分析代码实现小结Time 需求分析 系统正确的登录名和密码是:学习/123,请在控制台开发一个登录界面,接收用户输入的登录名和密码,判断用户是否登录成功,登录成功后展示:“欢迎进入系统!”&…

一文5000字详解Python中PO模式的设计与实现

在使用 Python 进行编码的时候,会使用自身自带的编码设计格式,比如说最常见的单例模式等。本文将为大家介绍PageObject自动化设计模式(PO模式)的设计与实现,感兴趣的可以了解一下 在使用 Python 进行编码的时候,会使用自身自带的…

Nginx(3)

目录 1.Nginx虚拟主机1.1基于IP虚拟主机1.2基于端口虚拟主机1.3基于域名实现的虚拟主机 2.日志详解 1.Nginx虚拟主机 虚拟主机,Nginx配置中的多个server{}区域对应不同的业务(站点) 虚拟主机方式基于域名的虚拟主机不同的域名访问不同的站点基于IP的虚拟主机不同的…

纯跟踪(Pure Pursuit)路径跟踪算法研究(1)

纯跟踪(Pure Pursuit)路径跟踪算法研究(1) 下午主要读了几篇论文 《自动泊车路径纯跟踪算法应用研究》 《基于纯追踪算法和樽海鞘优化算法的无人驾驶路径跟踪算法研究》 《基于自适应PP和MPC的智能车辆路径跟踪控制》 首先在公式推导方面还不是很清晰 最…

缓解针对LLM应用程序的存储提示注入攻击

推荐:使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 LLM提供提示文本,并根据其已训练和访问的所有数据进行响应。为了用有用的上下文补充提示,一些 AI 应用程序捕获来自用户的输入,并在将最终提示发送到 LLM 之前将用户看不…

7.5 详解批量规范化 对某个维度取平均值代码解读

一.举例计算均值、方差 假设我们有以下一组数据:[10, 15, 20, 25, 30] 首先,我们计算均值,即将所有数据相加后除以数据的数量: 均值 (10 15 20 25 30) / 5 100 / 5 20 1.1标准差 接下来,我们计算标准差&…

_declspec(naked) 初试(裸函数)

最近在写驱动时候初次使用裸函数,做一些记录 _declspec(naked)修饰可以生成一个“裸”函数, 使用后C编译器将生成不含函数框架的纯汇编代码,裸函数中什么都没有,所以也不能使用局部变量,只能全部用内嵌汇编实现。 可…

使用Presto、Trino数据库时提示“The datetime zone id ‘GMT+08:00‘ is not recognised”

出现这个问题的原因是:Presto、Trino的驱动使用了joda这个库来处理时区的问题。但这个库的编写人似乎对java zone的格式没有太多经验。先看一下出错的代码: com.facebook.presto.jdbc.internal.joda.time.DateTimeZone#forID 根据String类型的zoneId转成…

java日期常用操作

Testpublic void validateDateUtils(){// 1 字符串转换日期Date result DateUtil.parse("2023-08-01", com.alibaba.excel.util.DateUtils.DATE_FORMAT_10);log.info("result : [{}]" , result);// 2 日期转换字符串final Date date new Date();String f…

网络防御之SSL VPN

1. SSL工作过程是什么? 第一阶段: 客户端发送client hello消息到服务端,服务端收到client hello消息后,再发送server hello消息到客户端。 第二阶段: 服务器的证书,用于客户端给客户端发送信息时加密 serv…

韩顺平Linux基础篇

一、课程内容 二、Linux应用领域 一、Linux使用在哪些地方 Linux最强应用:服务器 三、Linux概述 三、Linux和Unix的关系 五、VM和Linux的安装 基本说明 学习Linux需要一个环境,我们需要创建一个虚拟机,然后再虚拟机上安装一个Centos系统来学…

将 Kwargs 传递给 Python 中的另一个函数

文章目录 Python 中的关键字参数在 Python 中使用**kwargs 调用函数使用 Python 将 kwargs 传递给另一个函数总结 Python 列出了可以传递给程序中的函数的两种类型的参数。 非关键字参数 (**args) 和关键字参数 (**kwargs)。 通常,python 函数必须使用正确数量的参…