日期:2014-05-17  浏览次数:20816 次

查看写个oracle存储过程.
. 某语音电话本表信息如下:
Call_book_info
MOBILE_ID 移动号码 VARCHAR2(12)  
CALLIN_TIME 呼入时间 Date
CALLOUT_TIME 呼出时间 Date
STATUS 状态 CHAR(1)

在某次大批量操作后,数据记录达到100万,MOBILE_ID估计有2万个重复,现要求删除重复的号码(只保留一条),因为该表是业务表,删除时不能影响业务的正常使用。编写存储过程实现删除重复号码的功能。
要求如下:
(1) 为保证删除的数据以后可查,在删除时要先做备份,备份不成功则不能进行删除。
(2) 要有日志记录,比如删除所花时间,删除成功了多少条,失败多少条等操作信息。
(3) 如果出现性能问题,要跟踪原因。生成trace文件进行分析,改进程序。


俺写了个过程.
create or replace procedure fuck
begin  
 declare v_exists number;  
--begin  
select count(*) into v_exists from user_tables where table_name = 'TEST1';  
  if v_exists > 0 then  
  execute immediate 'drop table TEST1';  
  end if;  
  -- end;  
  -- begin
execute immediate ' 
create table test1(
mobile_id varchar2(12),
callin_time date,
callout_time date,
status char(1)
)';
commit;
--end;
insert into test1(mobile_id,callin_time,callout_time,
status)
select * from Call_book_info;
commit;
delete from Call_book_info where mobile_id
not in (select min(mobile_id) from call_book_info);
end;
不知哪里出错了.求解.谢谢
没有oracle 基础;

------解决方案--------------------
SQL code

exec fuck;
--或
begin
    fuck;
end;

------解决方案--------------------
1存储过程的语法格式为:
create or replace procedure fuck
is
--变量声明;
begin
--过程主体;
end fuck;
2. 如果存储过程代码无误,可以通过 "/" 来执行代码,编译存储过程。
3.通过exec 或 execute 来调用编译后的存储过程。
------解决方案--------------------
探讨
. 某语音电话本表信息如下:
Call_book_info
MOBILE_ID 移动号码 VARCHAR2(12)
CALLIN_TIME 呼入时间 Date
CALLOUT_TIME 呼出时间 Date
STATUS 状态 CHAR(1)

在某次大批量操作后,数据记录达到100万,MOBILE_ID估计有2万个重复,现要求删除重复的号码(只保留一条),因为该表是业务表,删除时……