Code:
CREATE OR REPLACE PROCEDURE CRIMES.E_PROC
IS
v_MOB_COUNTER NUMBER(10) :=0;
v_imsi_counter NUMBER(16) :=0;
v_imei_counter NUMBER(16) :=0;
v_his_counter NUMBER(16) :=0;
v_tower_counter NUMBER(16) :=0;
v_exists NUMBER(16) :=0; /* should we check for duplicate record for each entry */
-- v_cust_id NUMBER(10) :=0;
v_CALLTIME date;
-- v_CALTYPE VARCHAR2(4);
v_CALLDT CRIMES.CALLS.call_date%TYPE;
v_CALLTYPE VARCHAR2(4);
v_CUST_COUNTER NUMBER(10) :=0;
v_MYNUMBER CRIMES.CALLS.mobile_no%TYPE;
v_HIS_NUMBER CRIMES.CALLS.HIS_NUMBER%TYPE;
v_SIMID CRIMES.CALLS.IMSI_NO%TYPE;
v_PHONEID CRIMES.CALLS.IMEI_NO%TYPE;
v_TOWERID CRIMES.CALLS.START_TOWER_ID%TYPE;
v_END_BTS_ID CRIMES.CALLS.END_TOWER_ID%TYPE;
v_DURATION CRIMES.CALLS.DURATION%TYPE;
v_HIS_IMEI CRIMES.CALLS.HIS_IMEI_NO%TYPE;
v_HIS_IMSI CRIMES.CALLS.HIS_IMSI_NO%TYPE;
v_HIS_START_BTS_ID CRIMES.CALLS.HIS_START_BTS_ID%TYPE;
v_HIS_END_BTS_ID CRIMES.CALLS.HIS_END_BTS_ID%TYPE;
v_ORIGINATING_NO CRIMES.CALLS_DUMMY.ORIGINATING_NO%TYPE;
v_SMSC CRIMES.CALLS.SMSC%TYPE;
v_Roam_Nw CRIMES.CALLS.Roam_Nw%TYPE;
v_mis_match_format EXCEPTION;
CURSOR c1 IS SELECT MOBILE_NO, HIS_NUMBER, IMSI_NO, IMEI_NO, CALL_DATE, CALL_TYPE,
START_TOWER_ID, END_TOWER_ID, DURATION,
HIS_IMEI_NO, HIS_IMSI_NO, HIS_START_BTS_ID, HIS_END_BTS_ID, ORIGINATING_NO,SMSC,Roam_Nw
FROM CRIMES.calls_dummy;
-- where rownum <= 10000 ;
BEGIN
-- Current Customer Id
SELECT NVL(MAX(customer_id),0) INTO v_CUST_COUNTER FROM CRIMES.CUSTOMER ;
IF v_CUST_COUNTER = 0 THEN
v_CUST_COUNTER := 1;
ELSE
v_CUST_COUNTER := v_CUST_COUNTER + 1;
END IF;
OPEN c1;
LOOP
FETCH c1 INTO v_MYNUMBER, v_HIS_NUMBER, v_SIMID, v_PHONEID, v_CALLTIME,
v_CALLTYPE, v_TOWERID, v_END_BTS_ID, v_DURATION, v_HIS_IMEI,
v_HIS_IMSI, v_HIS_START_BTS_ID, v_HIS_END_BTS_ID, v_ORIGINATING_NO, v_SMSC, v_Roam_Nw;
EXIT WHEN c1%NOTFOUND;
IF( SUBSTR(v_MYNUMBER,1,2) ='91') THEN
v_MYNUMBER := TO_NUMBER(TO_CHAR(SUBSTR(v_MYNUMBER,3)));
END IF;
IF( SUBSTR(v_HIS_NUMBER,1,2) ='91') THEN
v_HIS_NUMBER := TO_NUMBER(TO_CHAR(SUBSTR(v_HIS_NUMBER,3)));
END IF;
-- for Mobile and Customer Tables
SELECT COUNT(*) INTO v_MOB_COUNTER FROM CRIMES.MOBILE WHERE mobile_no = v_MYNUMBER;
IF v_MOB_COUNTER = 0 THEN
INSERT INTO CRIMES.CUSTOMER (customer_id) VALUES(v_CUST_COUNTER);
INSERT INTO CRIMES.MOBILE
VALUES(v_MYNUMBER, v_CUST_COUNTER,NULL,NULL);
END IF;
-- for IMSI and Mobile Table
SELECT COUNT(*) INTO v_imsi_counter FROM CRIMES.IMSI WHERE imsi_no = v_SIMID;
IF v_imsi_counter = 0 THEN
INSERT INTO CRIMES.IMSI VALUES(v_MYNUMBER, v_SIMID, NULL);
END IF;
-- for IMEI and Mobile Table
SELECT COUNT(*) INTO v_imei_counter FROM CRIMES.IMEI WHERE imei_no = v_PHONEID;
IF v_imei_counter = 0 THEN
INSERT INTO CRIMES.IMEI VALUES(v_MYNUMBER, v_PHONEID, NULL);
END IF;
-- for HIS Number and Mobile Table
SELECT COUNT(*) INTO v_his_counter FROM CRIMES.HIS_NUMBER WHERE HIS_NUMBER = v_HIS_NUMBER;
IF v_his_counter = 0 THEN
INSERT INTO CRIMES.HIS_NUMBER VALUES(v_HIS_NUMBER, v_MYNUMBER);
END IF;
-- for Tower
SELECT COUNT(*) INTO v_tower_counter FROM TOWER WHERE tower_id = v_TOWERID;
IF v_tower_counter = 0 THEN
INSERT INTO TOWER(tower_id) VALUES(v_TOWERID);
END IF;
SELECT COUNT(*) INTO v_tower_counter FROM TOWER WHERE tower_id = v_END_BTS_ID;
IF v_tower_counter = 0 THEN
INSERT INTO TOWER(tower_id) VALUES(v_END_BTS_ID);
END IF;
/*
--IF ((v_v_CALLDT IS NULL) || (v_CALLDT = '00/00/00')) THEN
IF ((v_CALLTIME IS NULL) OR (v_CALLTIME = '00/00/00')) THEN
RAISE v_mis_match_format;
END IF;
v_CALLDT := TO_DATE(TO_CHAR(v_CALLTIME),'DD-MM-YY HH24:MI:SS');
if v_CALLTYPE = '1' then
v_CALLTYPE := 'MTC';
end if;
if v_CALLTYPE = '2' then
v_CALLTYPE := 'MOC';
end if;
if v_CALLTYPE = '3' then
v_CALLTYPE := 'FORW';
end if;
if v_CALLTYPE = '4' then
v_CALLTYPE := 'ROAM';
end if;
if v_CALLTYPE = '8' then
v_CALLTYPE := 'SMMO';
end if;
if v_CALLTYPE = '9' then
v_CALLTYPE := 'SMMT';
end if;
*/
-- for Calls Table
INSERT INTO CRIMES.abc
VALUES(v_MYNUMBER, v_HIS_NUMBER, v_SIMID, v_PHONEID, v_CALLTIME,v_CALLTYPE,
v_TOWERID,v_END_BTS_ID,v_DURATION,v_HIS_IMEI,v_HIS_IMSI,v_HIS_START_BTS_ID,v_HIS_END_BTS_ID,v_SMSC,v_Roam_Nw);
IF v_CALLTYPE = 'FORW' THEN
INSERT INTO crimes.ORIGINATE VALUES (v_CALLDT, v_MYNUMBER, v_ORIGINATING_NO);
END IF;
v_CUST_COUNTER := v_CUST_COUNTER + 1;
END LOOP;
COMMIT;
-- delete from CRIMES.ABC where rownum <= 10000;
CLOSE c1;
EXCEPTION
WHEN v_mis_match_format
THEN Dbms_Output.PUT_LINE('Mis Match Format');
END E_PROC;
/
Comment