请教各位前辈,这几道数据库面试题怎么写,今天刚面试的。。。

qq_29448025 2017-07-02 03:19:59
今天面试java开发工程师,料想到肯定有数据库方面的考核,以为都是一些标准查询、增、删、改什么的,结果拿到题目,傻眼了,竟然是只偶尔听过,从来没用过的存储过程、触发器、游标。当时状态就不好了,数据库题一题都没写出来(根本也不会写)。题目当时拍了照,截图如下:




回来准备研究一下,这3个题目,结果翻了一本oracle的书,竟然要学几章,当时晕了。料想到后天还有场面试,怕遇到同类型的题,特请教各位大神帮我看看,这些语句怎么写。现在也只有临时报佛脚了。

还有一个额外问题,现在pl/sql、存储过程、触发器、游标在现实中还用得多吗?
...全文
231 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_29448025 2017-07-02
  • 打赏
  • 举报
回复
引用 7 楼 wmxcn2000 的回复:
楼主的学习钻研精神,还是挺赞的!
谢谢版主夸奖。
卖水果的net 2017-07-02
  • 打赏
  • 举报
回复
楼主的学习钻研精神,还是挺赞的!
卖水果的net 2017-07-02
  • 打赏
  • 举报
回复
引用 5 楼 qq_29448025 的回复:
版主,请教一下,第3题,这样写(也是一位前辈写的)和你写的有什么区别吗?
for update 涉及到锁了,一两句话,也表达不清楚,你可以百度研究一下。 条件,是要配合上面的 for update 语句的。 commit 语句,就是更新一条,提交一行,也可以放在最后统一提交,也可以每 100 (或 20000) 条提交一次,这个又涉及到了事锁、事务、UNDO 、REDO 这些概念了,你也可以先百度研究 下。 PS: ORACLE 是一个庞大的系统,官方的文档都200 多本,各个细节,只能慢慢的学习,一点一滴的积累;
qq_29448025 2017-07-02
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
--大概给你写一下,你自己测试 一下。 1. create prodecure plc_insert(p_cno varchar2, p_name varchar2, p_class varchar2) as begin insert into card(cno, name, class) values(p_cno, p_name, p_class); end; / 2. create trigger borrow_ins before insert on borrow for each row when (NEW.bno = 'ORACLE从入门到') begin insert into borrow(cno, bno, rdate) values(:new.cno, :new.bno, :new.rdate); end; / 3. begin for x in(select orderid, qty, ordernum from orders) loop if x.qty = x.ordernum then update orders set status = '已办理' where orderid = x.orderid; else update orders set status = '未办理' where orderid = x.orderid; end; end loop; end; / 还有一个额外问题,现在pl/sql、存储过程、触发器、游标在现实中还用得多吗? 很常用,建议都学习一下,关键时刻总是用的;
版主,请教一下,第3题,这样写(也是一位前辈写的)和你写的有什么区别吗?
DECLARE
  CURSOR order_cur IS SELECT * FROM orders FOR UPDATE;  --多了游标的定义,多了FOR UPDATE
BEGIN
  FOR x IN order_cur loop
    IF x.qty = x.ordernum THEN
      UPDATE orders SET status = '已办理' WHERE CURRENT OF xk_cur;  --条件不同
    ELSE
      UPDATE orders SET status = '未办理' WHERE CURRENT OF xk_cur;
    end if;
  END loop;
  COMMIT;  --多了COMMIT
END;
qq_29448025 2017-07-02
  • 打赏
  • 举报
回复
引用 3 楼 wmxcn2000 的回复:
太感谢了,版主。,我好好研究一下。另有一个问题,想问一下,第2题中,那个存放结果的borrow_save表是事先就要求存在,还是说,触发器在执行时,会自动生成此表? borrow 和 borrow_save 两张表必须提前建好;
嗯,谢谢。
卖水果的net 2017-07-02
  • 打赏
  • 举报
回复
太感谢了,版主。,我好好研究一下。另有一个问题,想问一下,第2题中,那个存放结果的borrow_save表是事先就要求存在,还是说,触发器在执行时,会自动生成此表? borrow 和 borrow_save 两张表必须提前建好;
qq_29448025 2017-07-02
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
--大概给你写一下,你自己测试 一下。 1. create prodecure plc_insert(p_cno varchar2, p_name varchar2, p_class varchar2) as begin insert into card(cno, name, class) values(p_cno, p_name, p_class); end; / 2. create trigger borrow_ins before insert on borrow for each row when (NEW.bno = 'ORACLE从入门到') begin insert into borrow(cno, bno, rdate) values(:new.cno, :new.bno, :new.rdate); end; / 3. begin for x in(select orderid, qty, ordernum from orders) loop if x.qty = x.ordernum then update orders set status = '已办理' where orderid = x.orderid; else update orders set status = '未办理' where orderid = x.orderid; end; end loop; end; / 还有一个额外问题,现在pl/sql、存储过程、触发器、游标在现实中还用得多吗? 很常用,建议都学习一下,关键时刻总是用的;
太感谢了,版主。,我好好研究一下。另有一个问题,想问一下,第2题中,那个存放结果的borrow_save表是事先就要求存在,还是说,触发器在执行时,会自动生成此表?
卖水果的net 2017-07-02
  • 打赏
  • 举报
回复
--大概给你写一下,你自己测试 一下。 1. create prodecure plc_insert(p_cno varchar2, p_name varchar2, p_class varchar2) as begin insert into card(cno, name, class) values(p_cno, p_name, p_class); end; / 2. create trigger borrow_ins before insert on borrow for each row when (NEW.bno = 'ORACLE从入门到') begin insert into borrow(cno, bno, rdate) values(:new.cno, :new.bno, :new.rdate); end; / 3. begin for x in(select orderid, qty, ordernum from orders) loop if x.qty = x.ordernum then update orders set status = '已办理' where orderid = x.orderid; else update orders set status = '未办理' where orderid = x.orderid; end; end loop; end; / 还有一个额外问题,现在pl/sql、存储过程、触发器、游标在现实中还用得多吗? 很常用,建议都学习一下,关键时刻总是用的;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧