|
Listing 1: INSERT trigger
CREATE OR REPLACE TRIGGER WEBANALYTIC.TRG_WEBDETAIL_ETL BEFORE
INSERT ON WEBANALYTIC.WEB_DETAIL FOR EACH ROW DECLARE
sBrowserAggregate VARCHAR2(255);
sVersion VARCHAR2(255);
BEGIN
-- Section 1: Do some cleanup on the GET field from Apache
IF (UPPER(:NEW.GET) LIKE '%INDEX.HTM') THEN
:NEW.GET := substr(:NEW.GET,1,(instr(UPPER(:NEW.GET),'INDEX.HTM')-1));
ELSIF (UPPER(:NEW.GET) LIKE '%INDEX.ASP') THEN
:NEW.GET := substr(:NEW.GET,1,(instr(UPPER(:NEW.GET),'INDEX.ASP')-1));
ELSE
-- just keep the original GET value from Apache...
null;
END IF;
-- Section 2: Here we perform some decomposition of the Apache USER_AGENT data
:NEW.BROWSER := NVL(SUBSTR(:NEW.USER_AGENT,INSTRB(:NEW.USER_AGENT,';',1,1)+2, (INSTRB(:NEW.USER_AGENT,';',1,2)-INSTRB(:NEW.USER_AGENT,';',1,1))-2),'Bot');
-- Section 3
:NEW.PLATFORM := NVL(SUBSTR(:NEW.USER_AGENT,INSTRB(:NEW.USER_AGENT,';',1,2)+2, (INSTRB(:NEW.USER_AGENT,';',1,3)-INSTRB(:NEW.USER_AGENT,';',1,2))-2),SUBSTR(:NEW.USER_AGENT,INSTRB(:NEW.USER_AGENT,';',1,2)+2, (INSTR(TRIM(:NEW.USER_AGENT),')')-INSTRB(:NEW.USER_AGENT,';',1,2)-2)));
-- Section 4
IF (INSTR(UPPER(:NEW.USER_AGENT),'MSI',1,1)) <> 0 THEN
sBrowserAggregate := 'Microsoft Internet Explorer';
ELSIF (INSTR(UPPER(:NEW.USER_AGENT),'NETSCAPE',1,1)) <> 0 THEN
sBrowserAggregate := 'Netscape';
ELSIF (INSTR(UPPER(:NEW.USER_AGENT),'KONQUEROR',1,1)) <> 0 THEN
sBrowserAggregate := 'Konqueror';
ELSIF (INSTR(UPPER(:NEW.USER_AGENT),'BOT',1,1)) <> 0 THEN
sBrowserAggregate := 'Bot';
ELSIF (INSTR(UPPER(:NEW.USER_AGENT),'MOZILLA',10,1)) <> 0 THEN
sBrowserAggregate := 'Mozilla';
ELSE
sBrowserAggregate := 'Other';
END IF;
:NEW.BROWSER_AGGREGATE := sBrowserAggregate;
-- Section 5
IF (UPPER(:NEW.USER_AGENT) LIKE '%MSIE%') THEN
sVersion := SUBSTR(:NEW.USER_AGENT,INSTR(:NEW.USER_AGENT,'MSIE')+5,3);
ELSIF (INSTR(:NEW.USER_AGENT,'Netscape',1,1) <> 0) THEN
sVersion := SUBSTR(:NEW.USER_AGENT,INSTR(:NEW.USER_AGENT,'Netscape/')+9,3);
ELSIF (INSTR(:NEW.USER_AGENT,'Netscape6',1,1) <> 0) THEN
sVersion := SUBSTR(:NEW.USER_AGENT,INSTR(:NEW.USER_AGENT,'Netscape6/')+10,3);
ELSE
sVersion := 'Other';
END IF;
:NEW.VERSION := sVersion;
-- Section 6: Convert the request size field to KB
:NEW.REQUEST_SIZE := (:NEW.REQUEST_SIZE / 1024);
END TRG_WEBDETAIL_ETL;
/
|