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

学习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存储过程调用和函数

【小练习】交互式网格自定义增删改(进行中)_第1张图片

交互式网格自定义增删改

行选中

var map =  new Map();

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

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

【小练习】交互式网格自定义增删改(进行中)_第2张图片

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

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

【小练习】交互式网格自定义增删改(进行中)_第3张图片

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

【小练习】交互式网格自定义增删改(进行中)_第4张图片

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

更改的内容:

【小练习】交互式网格自定义增删改(进行中)_第5张图片

 代码如下:

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→输入显示值和返回值→创建值列表

【小练习】交互式网格自定义增删改(进行中)_第6张图片

【小练习】交互式网格自定义增删改(进行中)_第7张图片

 批量删除相关代码

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

设置按钮

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

在布局中设置列和列跨距

【小练习】交互式网格自定义增删改(进行中)_第8张图片

 设置服务器端代码

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→右键 创建项→标识 名称(自定义)类型(隐藏)

【小练习】交互式网格自定义增删改(进行中)_第9张图片

创建列表

【小练习】交互式网格自定义增删改(进行中)_第10张图片

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

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

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: 并非所有变量都已绑定

【小练习】交互式网格自定义增删改(进行中)_第11张图片

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

解决方法:

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

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

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

记得输入的值和返回值

 【小练习】交互式网格自定义增删改(进行中)_第12张图片

新增服务器端代码

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;

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

【小练习】交互式网格自定义增删改(进行中)_第13张图片

 啊???

先去数据库查看数据有没有写入【小练习】交互式网格自定义增删改(进行中)_第14张图片

数据未写入

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

【小练习】交互式网格自定义增删改(进行中)_第15张图片

  创建的查询语句也有问题【小练习】交互式网格自定义增删改(进行中)_第16张图片

【错误记录】ORA-02014

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

正常处理方法和步骤:

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

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

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

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

 问题是代码根本找不到QAQ

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

【小练习】交互式网格自定义增删改(进行中)_第17张图片

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

【小练习】交互式网格自定义增删改(进行中)_第18张图片

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

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

小结:

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

你可能感兴趣的:(PL/SQL,oracle,apex,oracle,apex,pl/sql)