设为首页 收藏本站
查看: 993|回复: 0

[经验分享] 某运营商的oracle笔试题

[复制链接]

尚未签到

发表于 2018-9-24 06:08:13 | 显示全部楼层 |阅读模式
  今年初本人去某运营商应聘BI开发一职,做了一份笔试题,是本人见过的最有水平的oracle试题,题目很简单,任何人都知道怎么做,但能否做出来就不知道了,见下(时间长了,试题记得不是很清楚了):
  一.用plsql块实现在一个表中插入100000条数据,要求每1000条提交一次,表名自定。
  --很简单,见下(存储过程):
  create or replace procedure p_circle_commit
  as
  begin
  for i in 1..100000 loop
  -- dbms_output.put_line(i);
  insert into test(testid) values(i);
  if mod(i,1000)=0 then
  commit;
  dbms_output.put_line('commit');
  end if;
  end loop;
  end;
  /
  ---执行6.4秒
  ----如果采用批量提交,只要3.3秒:
  create or replace procedure p_circle_commit
  as
  begin
  for i in 1..100000 loop
  -- dbms_output.put_line(i);
  insert into test(testid) values(i);
  end loop;
  commit;  --批量提交
  end;
  /
  二. 有3个表 A(userid(用户ID),time(时间),fee(话费)),B(userid(用户ID),time(时间)),  C(userid(用户ID),fee(话费))各有1000万的数据, 3个表的userid是相同的,要求用B表的time字段,  C表的fee字段更新A表的相应字段,用存储过程实现。
  --基本实现思路(没有条件测试,估计很难实现,有条件也要谨慎,充分考虑效率、表空间、回滚段是否够用等):
  1.  要用B、 C的数据更新A,先取userid相同的数据,从A中取userid、B取time、C取fee字段的值,加到新临时表表中
  如:create table tempA-1 as select a.userid,b.time,c.fee
  from A,B,C  where a.userid = b.userid and a.userid = c.userid;
  2. 再取A表userid与B、C表userid不相同的数据,直接从A表中取(即B、C表中没有的数据不用更新),再建临时表
  如:create table tempA-2 as select a.userid,a.time,a.fee
  from A,B,C  where a.userid != b.userid and a.userid != c.userid;
  3. 把小临时表的数据加到大临时表中:
  Insert into tempA-1(userid,time,fee)   select a.userid,a.time,a.fee tempA-2  a where a.time >= '时间值';
  4. 最后将A表与 tempA-1互换名称。
  三。有个上百万的用户信息表,里面有部分重复号码,请删除重复的号码,用存储过程实现。
  --本人简单利用一个录音表来实现没有写存储过程,6万数据很短时间解决,100万数据需要多长时间没有测试。
  1. 建立表:
  create table RECORDFILE
  (
  SERIALNO   VARCHAR2(200),
  FILEPATH   VARCHAR2(400),
  PARTID     VARCHAR2(40),
  STAFFNO    VARCHAR2(100),
  RECORDTIME DATE
  );
  --使用循环加入6万数据
  commit;
  2.创建临时表 ,在6万多数据中查询staffno 不重复的数据,不到1秒时间。
  create table recordfile_temp as
  select * from recordfile t
  where t.serialno in (select max(r.serialno) from recordfile r group by r.staffno);
  --truncate掉原表:
  truncate table recordfile;
  --数据加到原表中,drop掉临时表:
  insert into /*+ append */ recordfile select * from recordfile_temp;
  commit;
  以上仅供参考,不足之处请谅解!
  结果是本人没有通过笔试,哪位能在40分钟能做完(原笔试1小时,还有一些BI基本知识、plsql的内容),可以去运营商那挑战T数量级的应用开发(绝对比那些小数据库开发刺激的多了)。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-600377-1-1.html 上篇帖子: Oracle SQL之--多表查询基础用法 下篇帖子: wind7安装oracle10g-ahead51Jie
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表