时间:2021-07-01 10:21:17 帮助过:9人阅读
用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