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