当前位置:Gxlcms > 数据库问题 > Oracle面试题

Oracle面试题

时间:2021-07-01 10:21:17 帮助过:9人阅读

procedure p(in n int,out result int) begin declace i int default 1; declace sum int default 0; while i<n set sum=sum+i; set i=i+1; //如果奇数相加则i=i+2 end while set result=sum; end

 

用PL/SQL块实现在一个表中插入1000条数据,要求每100条提交一次

delimiter ||
create procedure p(in n int)
begin 
declare i int default 0; 
set i=0; 
lp:loop insert into kkk values(i+1); 
set i=i+1; 
if mod(i,10)=0 then 
commit; 
end if; 
if i=n then 
leave lp; 
end if; 
end loop; 
end||

 

有3个表 A(userid(用户ID),time(时间),fee(话费)),B(userid(用户ID),time(时间)),  C(userid(用户ID),fee(话费))各有1000万的数据, 3个表的userid是相同的,要求用B表的time字段,C表的fee字段更新A表的相应字段,用存储过程实现。

create procedure p1
cursor abc_cur is select b.userid,b.time,c.fee 
from b join c on b.userid=c.userid;
begin
for i in abc_cur loop
update a set a.time=i.time,a.fee=c.fee 
where a.userid=i.userid;
end loop;
end ||

 

有上百万数据用户表,删除其中的重复数据,保留最小id号

delete from kxf  k
where k.name in(select name from kxf group by name having count(*) >1) and
k.id not in (select min(id) from kxf froup by name);

 

用户资料表:serv( serv_id number(10), pro_id number(10), user_type varchar2(30), terminal_name varchar2(30) )

其中,serv_id 为用户标识,是serv表的主键,prod_id为产品标识;user_type为用户类型;terminal_name为终端类型

终端类型临时表:terminal(serv_id number(10),terminal_name varchar2(30))

初始化的情况下,serv表的serv_id,prod_id,user_type字段是已知的,terminal_name字段是空的

要求:根据prod_id,user_type字段的值来更新terminal_name字段

更新条件为:

当条件满足“prod_id = 1 and user_type=‘A‘“时,terminal_name更新为‘固话’

当条件满足”prod_id = 1 and user_type=‘B‘“时,terminal_name更新为‘小灵通’

当条件满足”prod_id = 2“时,terminal_name更新为‘宽带’

当条件满足”user_type=‘C’“时,terminal_name更新为‘CDMA’

以上条件均不满足时,terminal_name更新为 -1;

create procedure p 
is 
begin
update serv s
set s.terminal_name = case when prod_id=1 and user_type=A then 固话
                                           when prod_id=1 and user_type=B then 小灵通
                                           when prod_id=2 then 宽带
                                           when user_type=C then CDMA
                                    else -1 
                                    end;
update terminal a
set s.terminal_name = (select t.terminal_name 
                              from serv t
                             where t.serv_id = s.serv_id)
where exists (select x
                   from serv t
                   where t.serv_id = s.serv_id);
end;

 

Oracle面试题

标签:保留   cat   导入   举例   res   无法   mod   布尔   row   

人气教程排行