ORACLE进阶(八)存储过程案例详解_orcale进阶(八),2024年最新蚂蚁金服开发面试

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

一、前言

2017.7.12入职以来,自己处于不断学习状态。在工作过程中,积累工作经验十分重要。尤其是一些业务知识自己需要不断充电。之前接到一个写批量小程序的任务,由于自己之前并未接触过Oracle,更别提什么PL/SQL,存储过程了,自己刚开始也是不知道从何处着手,但接到了任务,自己也只能硬着头皮上了,要不然呢?!

首先需要了解存储过程是什么?如何在PL/SQL中执行?存储过程、函数、包之间的关系是怎样的?

有关存储过程的学习,请参考博文《ORACLE进阶(七)存储过程详解》。

下面结合实际应用场景,讲解下存储过程的具体应用。

二、需求

利用存储过程实现:从CDEPDP表中获取旧机构号,然后依据旧机构号查表CDETRADEEX_BAK,获取到新机构号,并把新机构号后缀到旧机构号之后。

三、思路

  1. 从CDEPDP表中获取旧机构号字符串,形式为“1K7040,1K7090,1K7019”;然后利用正则表达式组装成数组形式;
  2. 依据旧机构号查表CDETRADEEX_BAK,获取到新机构号;
  3. 把新机构号后缀到旧机构号之后。

SPERIOD

CREATE OR REPLACE PROCEDURE SPERIOD IS

/* 创建游标cur_CDEPDP,用于提取CDEPDP中的trades数据 */
Cursor cur_CDEPDP IS
SELECT TRADES FROM CDEPDP;

v_count NUMBER;
v_sum NUMBER;
loop_counter NUMBER;
v_sum2 NUMBER;
v_result CDEPDP.TRADES%TYPE;
oldOrg_var CDEPDP.TRADES%TYPE;
oldOrg CDETRADEEX_BAK.OLDTRADENO%TYPE;
invalid_old_orgno EXCEPTION;
BEGIN
v_count := 0;
v_sum := 0;
v_sum2 := 0;
loop_counter := 1;
/* 使用游标for循环,按行获取CDEPDP中的数据 */
FOR trades in cur_CDEPDP LOOP
v_result := ‘’;
DBMS_OUTPUT.PUT_LINE(‘oldOrg Items:’ || trades.trades);
oldOrg_var := trades.trades;
v_count := v_count + 1;
v_sum := REGEXP_COUNT(oldOrg_var, ‘,’) + 1;
DBMS_OUTPUT.PUT_LINE(‘Total Items:’ || v_sum);
/* 若只存在一个数据元素 */
IF v_sum < 2 THEN
DBMS_OUTPUT.PUT_LINE(RETRIEVEORGNO(oldOrg_var));
DBMS_OUTPUT.PUT_LINE(‘Result:’ || oldOrg_var || ‘,’ ||
RETRIEVEORGNO(oldOrg_var));
ELSE
FOR loop_counter IN 1 … v_sum LOOP
oldOrg := LTRIM(RTRIM(REGEXP_SUBSTR(oldOrg_var,
‘[^,]+’,
1,
loop_counter),
‘,’),
’ ');
–DBMS_OUTPUT.PUT_LINE(oldOrg);
–DBMS_OUTPUT.PUT_LINE(RETRIEVEORGNO(oldOrg));
IF RETRIEVEORGNO(oldOrg) IS NOT NULL THEN
/* 去重并拼接结果(新机构号) */
IF REGEXP_LIKE(v_result, RETRIEVEORGNO(oldOrg)) THEN
CONTINUE;
ELSE
v_result := v_result || ‘,’ || RETRIEVEORGNO(oldOrg);
END IF;
/* ELSE RAISE invalid_old_orgno; CONTINUE; */
END IF;
END LOOP;
/* 拼接结果(旧机构号 + 新机构号) */
v_result := oldOrg_var || ‘,’ || LTRIM(v_result, ‘,’);
DBMS_OUTPUT.PUT_LINE(‘Result:’ || v_result);
v_sum2 := REGEXP_COUNT(v_result, ‘,’) + 1;
DBMS_OUTPUT.PUT_LINE(‘Total Items After Processed:’ || v_sum2);
END IF;
END LOOP;
/* 输出测试信息 */
DBMS_OUTPUT.PUT_LINE(‘Sum Items:’ || v_count);
/* 异常捕捉-数据信息不存在 */
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(‘数据库中不存在新机构号对应该旧机构号’);
WHEN invalid_old_orgno THEN
DBMS_OUTPUT.PUT_LINE(‘数据库中不存在新机构号对应该旧机构号2’);
END SPERIOD;

RETRIEVEORGNO

create or replace function RETRIEVEORGNO(oldOrg IN CDETRADEEX_BAK.OLDTRADENO%TYPE)
return CDETRADEEX_BAK.NEWTRADENO%TYPE is
return_value CDETRADEEX_BAK.NEWTRADENO%TYPE;
begin
SELECT NEWTRADENO INTO return_value FROM CDETRADEEX_BAK WHERE OLDTRADENO = oldOrg;
/*DBMS_OUTPUT.PUT_LINE(‘return_value:’ || return_value);*/
return(return_value);
/* 当旧机构号不存在对应的新机构号 */
EXCEPTION
WHEN NO_DATA_FOUND
THEN RETURN NULL;
end RETRIEVEORGNO;

select * from CDETRADEEX_BAK;
select * from cdepdp;

四、遇到的问题

  1. 正则表达式;
  2. 正确表示两数值相等使用“ =”;
  3. 包、存储过程、函数之间的关系?如何相互调用?

五、优化

在存储过程中新增传参,为达到模块化开发,更合理的方式是在入参中定义OUT参数,其他模块在调用时可直接使用处理结果。在获取到新参数后,新增更新表结构语句。
SPERIOD

CREATE OR REPLACE PROCEDURE SPERIOD_CDEPDP(p_BeginFlag IN VARCHAR2) IS

/* 创建游标cur_CDEPDP,用于提取CDEPDP中的trades数据 */
Cursor cur_CDEPDP IS
SELECT pdid, trades FROM CDEPDP;

v_sum NUMBER;
v_sumnew NUMBER;

最后

其实前端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

这里再分享一个复习的路线:(以下体系的复习资料是我从各路大佬收集整理好的)

《前端开发四大模块核心知识笔记》

最后,说个题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-TRu9VXIx-1713711247647)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值