브라우저 패턴이 너무 다양함...

하는데까지..



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
SELECT browser, COUNT(browser) AS cnt
FROM (
    SELECT
        CASE
            WHEN user_agent LIKE '%Windows%Chrome%' THEN 'Chrome'
            WHEN user_agent LIKE '%iPad%Chrome%' THEN 'ChromeIPad'
            WHEN user_agent LIKE '%iPhone%Chrome%' THEN 'ChromeIPhone'
            WHEN user_agent LIKE '%Android%Chrome%' THEN 'ChromeAndroid'
            WHEN user_agent LIKE '%Mac%Chrome%' THEN 'ChromeMacOs'    
            WHEN user_agent LIKE '%Linux%Chrome%' THEN 'ChromeLinux'
            WHEN user_agent LIKE '%Chrome%' THEN 'ChromeEtc'
             
            WHEN user_agent LIKE '%Windows%Safari%' THEN 'Safari'
            WHEN user_agent LIKE '%iPad%Safari%' THEN 'SafariIPad'
            WHEN user_agent LIKE '%iPhone%Safari%' THEN 'SafariIPhone'
            WHEN user_agent LIKE '%Android%Safari%' THEN 'SafariAndroid'
            WHEN user_agent LIKE '%Mac%Safari%' THEN 'SafariMacOs'    
            WHEN user_agent LIKE '%Linux%Safari%' THEN 'SafariLinux'  
            WHEN user_agent LIKE '%Safari%' THEN 'SafariEtc'
             
            WHEN user_agent LIKE '%Windows%Firefox%' THEN 'Firefox'
            WHEN user_agent LIKE '%iPad%Firefox%' THEN 'FirefoxIPad'
            WHEN user_agent LIKE '%iPhone%Firefox%' THEN 'FirefoxIPhone'
            WHEN user_agent LIKE '%Android%Firefox%' THEN 'FirefoxAndroid'
            WHEN user_agent LIKE '%Mac%Firefox%' THEN 'FirefoxMacOs'    
            WHEN user_agent LIKE '%Linux%Firefox%' THEN 'FirefoxLinux'     
            WHEN user_agent LIKE '%Firefox%' THEN 'FirefoxEtc'
             
            WHEN user_agent LIKE '%MSIE 6%' THEN 'IE6'
            WHEN user_agent LIKE '%MSIE 7%' THEN 'IE7'
            WHEN user_agent LIKE '%MSIE 8%' THEN 'IE8'
            WHEN user_agent LIKE '%MSIE 9%' THEN 'IE9'
            WHEN user_agent LIKE '%MSIE 10%' THEN 'IE10'
            WHEN user_agent LIKE '%rv:11%' THEN 'IE11'
             
            WHEN user_agent LIKE '%iPad%' THEN 'AppIPad'
            WHEN user_agent LIKE '%iPhone%' THEN 'AppIPhone'
            WHEN user_agent LIKE '%Android%' THEN 'AppAndroid'
 
            WHEN user_conn_info LIKE '%Opera%' THEN 'Opera'
            ELSE 'EtcBrowser'
        END browser
        FROM USER_AGENT_HISTORY
        WHERE LOGIN_DT >= '20160517000001' AND LOGIN_DT <= '20160517999999'
    ) AS browsers
GROUP BY browser
ORDER BY cnt DESC

특정 테이블의 정보를 특정 데이터로 업데이트 해달라는 요청이 가끔 들어온다.

물론 그 데이터는 엑셀로 올것이고, 현재 DB데이터와 1:1 맵핑되는 상황이 아닐것이죠.

그래서 1번의 방법과 같이  임시 테이블에 넣은다음에 쿼리를 돌리겠죠.


하지만 1번과 같이 하게되면 set 절이 반복적으로 Random 액세스를 해서 부담이 발생한다는군요.

뭐 지금까지 요청받은 부분에서 부담요소가 있었던것은 아니지만 , 동료분이 2번과 같은 Oracle 문법을 사용하길래 메모해본다.


우선적으로 위와 같은 성능을 해결하기위해서 "Updatable Join View" 방식을 사용한다고 합니다.

그런데 이 방법은 제약조건이 존재하는데 꼭 UK 또는 PK 설정이 되어 있어야 한다고합니다.

하지만 그렇지 않은 경우도 있을 수 있죠.

그래서 사용하는것이 BYPASS_UJVC 힌트절이라고 합니다.


머 자세한건 잘 모릅니다.

동료분이 사용하길래 메모해둠!!!


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
-- 1번
update test_a1 a
set b = (
    select b
    from test_b1
    where a = a.a
)
where exists (select 1 from test_b1 where a = a.a);
 
-- 2번
update /*+ BYPASS_UJVC */
(
    select a.b a_b, b.b b_b
    from test_a1 a, test_b1 b
    where a.a = b.a
)
set a_b = b_b;
 
/* 
drop table test_a1;
drop table test_b1;
create table test_a1
(
    a number,
    b varchar2(10)
);
create table test_b1
(
    a number,
    b varchar2(10)
);
insert into test_a1 values(1, 'a1');
insert into test_a1 values(2, 'a2');
insert into test_b1 values(2, 'a2222');
*/


create database aaa default character set utf8;

SET storage_engine=INNODB;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
create or replace procedure sp_config_setting2
is  
    menuCd  varchar(4);
    menuUrl varchar(200);
     
    cursor curTb   
    is
    select menu_cd, menu_url from menu where menu_ctg = 'A' and use_yn = 'Y' and menu_view_yn = 'Y';
begin
     
    open curTb;
     
    loop
        fetch curTb
        into menuCd, menuUrl;
        EXIT  WHEN  curTb%NOTFOUND;
         
        if menuUrl is not null then
             
            if instr(menuUrl, '냠냠냨') = '0' then
                dbms_output.put_line(menuCd || '=' || menuUrl || '-' || instr(menuUrl, '냠냠냠'));
                 
                update menu set menu_url = '냠냠냠' where menu_cd = menuCd;
            end if;
        end if;
    end loop;   
     
    close curTb;
end;
 
--execute sp_config_setting2();
--DROP PROCEDURE sp_config_setting2;
Oracle 10g Client 다운로드 받아 설치 중간에 설치유형으로 "관리자" 를 선택 후 진행한다.

..Disk1\stage\prereq\client\refhost.xml
..Disk1\stage\prereq\client_prereqs\client\refhost.xml

해당 파일을  열어서
<CERTIFIED_SYSTEMS>자식노드로 아래와 같이 추가
<OPERATING_SYSTEM> 
 <VERSION VALUE="6.1"/> 
</OPERATING_SYSTEM> 

..Disk1\install\oraparam.ini 파일을 열어서 아래와 같이 수정
 #Windows=5.0,5.1,5.2,6.0,6.1

Ps. Orange 를 사용할 경우 Instant Client 를 이용할 경우 몇가지 문제가 생긴다. 우선 sqlplus 를 받아야 하고 ORACLE_HOME관련 문제도 생긴다.
인터넷상에 해결 방법이 있는것 같기도 하다. 

1
2
3
4
5
6
DROP PROCEDURE IF EXISTS `test_db`.`usp_test`;
CREATE PROCEDURE `test_db`.`usp_test`(in p_b varchar(50))
    READS SQL DATA
BEGIN  
    select * from test where b = p_b;   
END

1
2
3
4
5
6
7
MERGE INTO SEARCH_DATA SD
    USING (SELECT COUNT(DATA) AS C FROM SEARCH_DATA WHERE DATA = 'B') S
    ON (S.C > 0)
 WHEN MATCHED THEN
    UPDATE SET SD.CNT = SD.CNT + 1
 WHEN NOT MATCHED THEN
    INSERT VALUES ('B', 1)
1
2
3
4
5
6
7
8
9
10
CREATE TABLE ADM_HISTORY (
  SEQ       NUMBER NOT NULL,
  USER_ID     VARCHAR2(20)      NOT NULL,
  CUD       VARCHAR2(1) CHECK( CUD IN('C', 'U', 'D')) NOT NULL,
  TITLE     VARCHAR2(2000) NOT NULL,
  URL       VARCHAR2(500) NULL,
  REGDATE   DATE DEFAULT SYSDATE,
  PRIMARY KEY ( SEQ ),
  FOREIGN KEY ( USER_ID ) REFERENCES ADM_USERS ( USER_ID )
);


1
2
3
4
5
6
7
String jdbcDriver = "cubrid.jdbc.driver.CUBRIDDriver";
String jdbcURL    = "jdbc:cubrid:localhost:30000:testdb:dba::";
String jdbcID     = "dba";
String jdbcPWD    = "pwd";
 
Class.forName(jdbcDriver);
Connection c = DriverManager.getConnection(jdbcURL, jdbcID, jdbcPWD);

JDK 1.4, 1.5 일 경우
sqljdbc.jar JDBC 3.0 지원

JDK 1.6 일 경우
sqljdbc4.jar JDBC 4.0 지원


ㅓㅇ[출처] sqljdbc.jar 와 sqljdbc4.jar 의 차이점|작성자 



+ Recent posts