posted by 지긋이 2019. 12. 19. 11:38

IBsheet(ver 7.x기준)가 초기 로딩될 때 설정은 기본 가이드를 따른다.
여기에서 자주 쓰는 기능을 적어본다.

기본 형태

1. Cfg
{SearchMode:smLazyLoad,Page:50,MergeSheet:msHeaderOnly};

2. HeaderMode
- Cols 앞에 쓰기도 하고 뒤에 쓰기도 한다.
var info = {Sort:1, ColMove:1, ColResize:0, HeaderCheck:0};

Header 클릭시 Sort 가능 여부, True/false로도 대체 가능
Header Column 이동 가능 여부, True/false로도 대체 가능
Header Column의 Width Resize 가능 여부, True/false로도 대체 가능

Header CheckBox 타입일 경우 전체 CheckBox(일괄 선택) 표시 가능 여부, True/false로도 대체 가능

3. Cols : 헤더에 들어갈 타이틀과 헤더기능을 지정한다.
{Header:"결재여부|결재여부",Type:"CheckBox",Width:80,SaveName:"A",ColMerge:0,Align:"Center"},
결재여부|결재여부 : 헤더 타이틀 Text를 "|"로 연결한다.
Type:"CheckBox" : Column 타입을 결정한다.(세부내용은 3-1 참고)
SaveName:"A" : SQL에서 가져오는 컬럼명을 말하며, 카멜케이스 형식으로 연결한다.
ex) SQL TEST_ABC => SaveName:"testAbc"

var headers = [
{Header:"
결재여부|결재여부",Type:"CheckBox",Width:80,SaveName:"A",ColMerge:0},
{Header:"신청인|신청인",Type:"Text",Width:80,ColMerge:1},
{Header:"신청일자|신청일자",Type:"Date",Width:100,Format:"Ymd"},
{Header:"신청금액|신청금액",Type:"AutoSum",Width:85,SaveName:"B",Format:"Integer"},
{Header:"기간|시작일",Type:"Date",Width:100,SaveName:"C",Format:"Ymd",ColMerge:0},
{Header:"기간|종료일",Type:"Date",Width:100,SaveName:"D",Format:"Ymd",ColMerge:0},
{Header:"시간|시작",Type:"Date",Width:100,Format:"Hm",ColMerge:1,Align:"Center"},
{Header:"시간|종료",Type:"Date",Width:100,Format:"Hm",ColMerge:1,Align:"Center"}
];

mySheet.InitHeaders(headers,info);

3-1. Type

3-2. Format
기본형은 Format:""이다.

유형 설명
Integer(NullInteger) 정수 형태, 기본 0(기본 Null)
Float(NullFloat) 실수 형태, 기본 0(기본 Null)
Ymd 년월일
Ym/Md 년월/월일
Hm/Hms 시분/시분초
YmdHms/YmdHm 년월일시분초/년월일시분
Number 숫자 형태 (특정 포맷없이 숫자키만 입력 받는 형태)

- 숫자 : #
해당위치에 값이 있는 경우 해당 값을 표시하고, 없는 경우는 빈값으로 표시한다. 소수점 이하에서 사용하는 경우는 표시할 자리수를 결정하며 입력된 값의 자리수가 #의 개수보다 많은 경우 반올림하여 개수만큼 표시한다.

Input= 12345.678, Format=#,###.##,Output=12,345.68
Input= 0.789  Format=#,###.##,Output=.79
- 숫자 : 0
해당위치에 값이 있는 경우 해당 값을 표시하고, 없는 경우는 0으로 표시한다. 소수점 이하에서 "#"과 동일하게 동작한다.
)
Input=123456.7  Format=#,##0.00  Result=123,456.70
Input= 0.7  Format=#,##0.00  Result=0.70
- 
소수점 : .
소수점이 있는 경우 실수표현이 가능하며 소수점을 표현하는 경우 ibmsg SYS_DecimalSeparator에 설정되어 있는 값으로 표현된다.
- 천단위구분자 : ,
천단위 구분자를 넣은 경우 천단위 마다 구분자를 표시하며 ibmsg SYS_GroupSeparator에 설정되어 있는 값으로 표현된다. 또한, 소수점 바로 앞에 사용하는 경우는 콤마 개수만큼 1000으로 나눈 값으로 표현한다.
)
Input= 123456.789  Format=0,.00  Result=123.46
Input= 123456.789  Format=0,,.00  Result=0.12
- 퍼센트 : \\%
마지막에 퍼센트 기호를 넣는 경우 자동으로 %를 표현한다.
)
Input=123.456 Format=#,##0.00\\%  Result=123.46%
- 문자 : # 또는 *
해당위치에 값이 있는 경우 해당 값을 표시하고, 없는 경우는 빈값으로 표시한다.
)
Input=7907211022553
=> Format=######-****, Result=790721-****553

이 내용은 아이비시트에서 제공하는 개발자가이드+실제적용 경험에 의해 기재한 글입니다.

반응형
posted by 지긋이 2019. 12. 17. 09:36

자주 사용하는 명령어지만 가끔 까먹을 때가 있어 기록차 남겨둔다.

1. 드라이브 이동 : 현재 드라이브가 C인데 D드라이브로 이동하고 싶다면?
C:\>D:

2. 폴더 경로 이동 : 현재 드라이브의 특정 폴더로 이동하고 싶다면?
C:\>cd eclipse
C:\eclipse>cd configuration
C:\eclipse\configuration>

3. 화면 정리(클리어)
C:\>cls

반응형
posted by 지긋이 2019. 12. 12. 09:11

 

1. 특수문자 제거
SELECT REGEXP_REPLACE('Abcde/2019', '[[:punct:]]') AS Chg FROM DUAL;
=> Abcde2019

2. 날짜 치환

3. 문자 위치 찾기
- @ 위치 찾기(숫자 반환)
SELECT INSTR('ABC1234defg!@#','@',1,1) AS Search FROM DUAL;
=> 13
SELECT INSTR('ABC@1234@defg!@#','@',1,1) AS Search FROM DUAL;
: @1번째 위치를 찾는다.
=> 4
SELECT INSTR('ABC@1234@defg!@#','@',1,2) AS Search FROM DUAL;
: @2번째 위치를 찾는다.
=> 9

4. 문자 자르기(위치로 자르기)
SELECT SUBSTR('20191212',1,4) AS cut FROM DUAL;
=>2019
* 응용1 : 특정 문자 위치를 찾은 숫자반환으로 위치 자르기
SELECT SUBSTR('20191212>AAA>BCCC>',1,INSTR('20191212>AAA>BCCC>','>',1,2)) CUT_CHK FROM DUAL
: INSTR('20191212>AAA>BCCC>','>',1,2) 위치는 13. 즉, SUBSTR('20191212>AAA>BCCC>',1,13) 과 같은 의미
=> 20191212>AAA>
* 응용2 : 찾은 위치-1(> 찾은 위치-1)
SELECT SUBSTR('20191212>AAA>BCCC>',1,INSTR('20191212>AAA>BCCC>','>',1,2)-1) CUT_CHK FROM DUAL
: INSTR('20191212>AAA>BCCC>','>',1,2)-1 위치는 12. 즉, SUBSTR('20191212>AAA>BCCC>',1,12) 과 같은 의미
=> 
20191212>AAA

반응형

'IT(job) > DB' 카테고리의 다른 글

Oracle(Tool)에서 & 입력/조회하기  (0) 2020.02.18
[Oracle] Connect By...  (0) 2020.02.14
[Oracle] For문 Loop 입력하기  (0) 2019.12.02
[Oracle] Table Copy 기존 테이블을 이용한 응용  (0) 2019.11.26
[Oracle] Order by  (0) 2019.09.20
posted by 지긋이 2019. 12. 2. 15:12

생각보다 빈번하게 사용하는 거라 정리 한번.

1. 문자 -> 날짜(타입바꾸기)로 변경
calcu_formatChk(reqYmd);

function calcu_formatChk(ymd){ //형식이 yyyymmdd일 경우 . 만약 하이픈(-)이 포함되어 있다면 변환작업 후 진행(3번)
        var yyyy = ymd.substr(0,4); 
        var mm = ymd.substr(4,2); 
        var dd = ymd.substr(6,2);                         
         
      calcu_ymd = new Date(yyyy, mm-1, dd); 
       //console.log(ymd +"|결과 : " + calcu_ymd + "/n 월Chk : " + (calcu_ymd.getMonth()+1)); 
       return calcu_ymd; 
    }

2. 날짜 차이 구하기
getDayFromToCalDay(dt1, dt2);

function getDayFromToCalDay(dt1, dt2) { //Date 타입 혹은 YYYYMMDD로 들어왔을 때
        var diffDate_1 = dt1 instanceof Date ? dt1 :new Date(dt1);  //Test 필요(Date가 아닐 때 1번으로 연결하면 될 듯)
        var diffDate_2 = dt2 instanceof Date ? dt2 :new Date(dt2);  //Test 필요(Date가 아닐 때 1번으로 연결하면 될 듯)
                 
        var calDay = Math.abs(diffDate_2.getTime() - diffDate_1.getTime()); //시간으로 계산
        calDay = Math.ceil(calDay / (1000 * 3600 * 24)); //날짜로 변환
        //console.log(dt1+"|"+dt2+"\n날짜비교>>"+diffDate_1+"|"+diffDate_2+"||"+calDay); 
        return calDay
    }

3. 하이픈 포함된 날짜 하이픈 제거해서 반환
formatDate(searchApplYmd,"-");

// 날짜 포맷을 적용한다.. 
    function formatDate(strDate, saper) { 
        if(strDate == "" || strDate == null) { 
            return ""; 
        } 

        try { 
            if(strDate.length == 10) { //YYYY-MM-DD
                return strDate.substring(0,4)+saper+strDate.substring(5,7)+saper+strDate.substring(8,10); 
            } else if(strDate.length == 8) { 
                return strDate.substring(0,4)+saper+strDate.substring(4,6)+saper+strDate.substring(6,8); 
            } else { 
                return ""; 
            } 
        } catch(e) { 
            return ""; 
        } 
    }

반응형
posted by 지긋이 2019. 12. 2. 11:19

반복적으로 숫자 증가시켜 입력(INSERT)하기
: 동일한 내용을 특정 숫자만 추가해서 입력하여야 할 경우 사용한다.

예시) 1~20까지 숫자 증가시켜 입력시키기
DECLARE
  P_SQLCODE VARCHAR2(1000);
  P_SQLERRM VARCHAR2(1000);  
  i BINARY_INTEGER := 0;
BEGIN
-- for문 loop
  FOR i in 1..20 LOOP
  BEGIN  
    INSERT INTO TB_TEST001 
    values
    ('ABC','19G02',i,'P14',1,sysdate,'rosebay')
    ;  
  EXCEPTION
  WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE( 'cnt='||i );
        P_SQLERRM := 'cnt='||i||'의 TB_TEST001 UPDATE시 => ' || SQLERRM;
        P_COM_SET_LOG_NOCOMMIT('ABC','PAP','AAA','10','cnt='||i ||SQLERRM , 'ADMIN');
        RETURN;
  END;
  END Loop;
END;       

반응형
posted by 지긋이 2019. 11. 27. 10:24

업체로부터 요청사항이 이렇게 들어왔다.

최초 로딩시 Cell값은 빈칸으로 로딩되고 합계값만 표기해 주세요.
단, 해당 값은 기존에 있던 값과 같이 합계가 나와야합니다.

해당 Cell은 IBSheet를 사용하여 AutoSum을 구하고 있었는데 기존 값은 값대로 처리가 되어야 했으므로
기존값은 숨김처리하고 Temp Cell을 이용하여 처리해야 하는데 상단 Row값을 공백 처리하면 합계값도 0이 되는 상황 
IBSheet의 Type을 Int로 적용했는데 숫자의 콤마처리가 되지 않았다.

그래서 여러가지를 생각해봤는데
1. 쿼리에서 Text로 콤마를 붙여서 갖고 오는 방법(SUM을 구한후 포맷처리해야해서 쿼리를 좀 뜯어고쳐야...)
2. IBSheet 상 다른 콤마 처리를 찾아 보는 것
- IBSheet상 Type과 Format 처리는 바꿔도 동일. 간단할거 같았지만(?) 더 찾아보려면 많은 시간이 소요될 것 같았다...

그래서 생각한 가장 효과적인 방법은 기존 값의 AutoSum 합계값은 갖고 오고 스크립트로 콤마처리

예시) 보이는 1차값(Mon01Temp)은 Mon01 합계만 set한다.     
//쿼리에서는 mon01Temp 값을 세팅하지 않는다.
    var mon01SumSet = sheet1.GetCellValue(sheet1.LastRow(), "mon01");
    sheet1.SetCellValue(sheet1.LastRow(), "mon01Temp",addComma(mon01SumSet));

function addComma(num) {
  var regexp = /\B(?=(\d{3})+(?!\d))/g; //정규식
  return num.toString().replace(regexp, ',');
}

참고 https://webisfree.com/2016-08-29/[%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8]-%EC%88%AB%EC%9E%90-%ED%83%80%EC%9E%85%EA%B0%92%EC%97%90-%EC%BD%A4%EB%A7%88-%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

반응형
posted by 지긋이 2019. 11. 26. 10:12

1. 기존 사용하던 테이블 컬럼 설정 이용하여 Backup 테이블 만들기 
CREATE TABLE 신규테이블_BAK AS
SELECT * FROM 기존테이블 ;

COMMENT ON TABLE "스키마명"."신규테이블_BAK"  IS '기존테이블_BAK';

2. 기존 사용하던 테이블의 데이터 백업 테이블에 복사하기(데이터 copy)
INSERT INTO 신규테이블_BAK
SELECT * FROM 데이터가있는기존테이블명 
WHERE 절(특정 조건 있을 시/전부 복사하려면 WHERE 절 생략)

반응형
posted by 지긋이 2019. 10. 27. 18:01

오랜만의 와우라 돈 되는 전문기술(?) 보다 캐릭터에 맞는 전문기술을 해 보기 위해 가죽세공을 했다.
키트가 은근 쏠쏠하고, 생각보다 레벨에 맞는 장비는 사용되지 않는다.

계속 하다 보니 숙련도나 전문화 과정이 너무 까다로워서 기록으로 남긴다.

일단 가죽 세공의 재료는 당연히 가죽! 재료를 구하기 위해서는 전문기술 무두질이 필요하다.
(무두질이 없을 경우 구매(경매장)이나 드랍된 아이템 혹은 궤짝 같은데서 얻어야 하는데 한계가 있다.)

가죽세공은 어느정도 숙련도가 상승하게 되면 사슬 아이템까지 제작이 가능하므로,
도적/드루이드/사냥꾼/주술사 캐릭터가 배우게 되면 도움을 많이 받을 수 있을 것으로 생각된다.

본 서버는 숙련치가 800(?) 까지 있다고 하는데 현재 클래식 기준은 최대치 300이다.

숙련도와 최소 요구 레벨은 아래와 같다.

    숙련도 최대치 최소 요구 레벨
수습 가죽 세공 0 75 5
숙련 가죽 세공 50 150 10
전문 가죽 세공 125 225 20
대가 가죽 세공 200 300 35

가죽의 단계는 보통 아래와 같이 상승된다.
얇은가죽 > 일반가죽 > 질긴가죽 > 두꺼운가죽 > 튼튼한가죽

숙련을 올리다보면 일반가죽 부터는 아이템별 제작시 경화가죽도 필요하게 되는데
통가죽을 가죽세공으로 변환시켜 만들 수 있다.
일반 경화 가죽 > 질긴 경화 가죽 > 두꺼운 경화 가죽 > 거친 경화 가죽

심화과정(?)으로 각 숙련별 조금 더 레어한 아이템을 만들 때는 다른 재료도 필요한데,
무두질로 획득할 수 있는 가죽 재료는 아래와 같은 아이템 들이 있다.(기억나는 것들만...)
전갈딱지 > 두꺼운전갈딱지 ! 전갈 류 무두질 시 획득 가능
거북등딱지(중요아이템은 ★★★★★, 전통 가죽세공 퀘스트 아이템으로 해당 아이템이 필요하다.)
닳아빠진 용비늘 > 녹색용비늘 > 붉은용비늘 > 푸른용비늘 > 검은용비늘 ! 용 류 무두질 시 획득 가능

데빌사우루스 가죽 ! 흔히 말하는 데빌셋의 재료인데 운고로 분화구(평균 렙 50-55)
55레벨+ 정예 몬스터에게 획득할 수 있다.
해당 아이템은 만렙(60레벨) 사냥꾼이 혼자 사냥해서 잡는건 본적은 있지만
일반적인 솔로잉 사냥으로는 쉽게 구하기 어려운편으로 추정된다.

이 외에 다른 가죽들도 가끔 본 적은 있지만 어디에 쓰이는지 알 수가 없어서 기재만 해본다.
그림자 퓨마 가죽, 두꺼운 늑대 가죽

가죽세공을 가르쳐 주는 NPC는 대도시에 위치하고 있는데 225까지는 대도시이지만
그 이후는 다른 지역으로 가야한다.
- 150 이상은 다르나서스의 장인지구에 있는 텔로니스를 찾자.
- 225 이상은 동부내륙지의 드라크 스톤핸드에게 배울 수 있는데, 여관이 있는 건물의 좌측 지하 1층에 위치한다.
=> 맹금의봉우리 글씨가 있는 곳의 큰 건물

여기까지는 그래도 쉽게 도달할 수 있는 정도인데 이 다음부터가 참 어렵다.

필자는 도적을 주로 플레이하는 유저기 때문에 전통 가죽 세공을 배우기로 했다.

단계를 차곡차곡 살펴보자.
일단 페랄라스에 가면 가죽세공용품 상인이 야생시리즈 제작도안 퀘스트를 받을 수 있다.

  필요 아이템 제작 재료
[45]야생 가죽 방어구 두꺼운 가죽 10  
[45]야생 가죽 어깨보호구 두꺼운 방어구 키트6, 야생덩굴1 두꺼운가죽 30, 비단실타래 6
[45]야생 가죽 조끼 거북 껍질 흉갑2, 거북 껍질 장갑2,
야생덩굴1
두꺼운가죽 24, 거북등딱지 40,
큰 비단 실타래 4
[45]야생 가죽 가죽 투구 밤하늘 튜닉2, 밤하늘 머리띠2, 야생덩굴1 두꺼운가죽 24, 비단 실타래 8
[45]야생 가죽 장화 밤하늘 바지2, 밤하늘 장화2, 야생덩굴2 두꺼운가죽 60, 비단 실타래 8,
큰 비단 실타래 4
[45]야생 가죽 다리보호구 거북 껍질 투구2, 거북 껍질 팔보호구2,
야생덩굴2
두꺼운가죽 44, 거북등딱지 72,
큰 비단 실타래 4
[45]야생 가죽 세공의 대가 : 위의 퀘스트를 모두 마치면 된다.
전통 가죽세공
(페랄라스 탈라나르 카리시아 문헌터)
야생 가죽 조끼1, 야생 가죽 투구1 두꺼운가죽 22, 야생덩굴4,
두꺼운 경화가죽 2
전통 가죽 세공 완료! 경험치 4200XP

250까진 쉽게 올렸는데 후.. 이후는 진짜 헬이다. 계속 해야되나 고민

상층 가서 핀클 먹고 오닉시아를 벗겨!!

 

반응형
posted by 지긋이 2019. 10. 3. 11:09

자신의 렙의 최대 5배까지 올릴 수 있다.

레벨이 20레벨 대가 되면 자물쇠 관련 퀘스트를 준다.
- 스톰윈드

붉은마루 가서 자물쇠 숙련을 올리라고 하는데...
- 최소 90까지(최대 100) 숙련을 올리기를 추천
- 이 다음 퀘인 서부몰락지대의 탑에 있는 상자가 숙련 90정도 되야 열리는 것으로 기억

이후 150까지는 붉은마루 강바닥(수중호흡 있다면 굿!)의 상자를 열어서 올린다.
- 강바닥이 너무 귀찮다면 125가 되면 도시에서 상자 까드립니다. 광고~
- 125 상자는 30대 레벨의 인간형 몹에게 훔치기 해도 잘 나온다.

이후 150에서 175까지는 (최대 180까지로 추정되나 170만되도 회색 상자가 있다.)
- 저습지 잃어버린해안 푸른아가미 습지대 멀록마을


175부터는 40대 레벨대의 인간형 몹한테 훔치기 하면 정말 잘 나온다.
이 때 150대여서... 맨날 훔친거 다 버린 ㅜㅠ
- 샤우스쇼어에 던홀드 요새(1시방향)에서 175-185
- 잊땅 나가 많은 장막의 바다(수중호흡 있다면 굿! 최대 235? 230까지 추천) 경쟁자가 없으면 좋은 곳!
  장막의 바다 글씨 우측으로 해안가에서 바닷속 나가있는 쪽 근처에 포진해 있음!
- 황땅 고통의 요새 : 175이상 권장(최대 225?)
- 175에 또 상자 찾으러 다니기 귀찮다면 도시에서 상자 까드립니다. 광고~
- 놈리건 뒷문(~200), 수도원(~200)

이제 225부터는 타나리스의 해적단 마을! 220대부터 최대 300(?)까지 가능하다고 한다.
249까지는 주황색, 250부터는 노란색으로 변경된다.

금고와 보관함은
청동금고(1) -> 청동 금고(100)/찌그러진 보관함 -> 튼튼한 청동금고(75) -> (125)낡은보관함
-> 강철 금고(175)/튼튼한 보관함 -> 튼튼한 강철 금고(225)/미스릴 금고 -> 토륨 금고(250)/견고한 보관함

그 외 기계공학 연습용 자물쇠로 1-75까지 가능

튼튼한 강철금고 (225-)
견고한 보관함(225-)(51렙이상 인간형몹 훔치기) ; 200이후엔 훔치기로 상자가 잘 나와서 숙련올리기 부담이 적음
이글거리는 협곡 문(250) 또는 근처의 용관로 동굴속에 상자 젠(-275)

275-300
검은바위 나락의 잠긴 문(275) -입구근처의 잠긴 문 3-4개
동부역병 티르의 수도원(-300)

300-350
?보관함(300-61렙이상 인간형몹 훔치기) ; 상자로도 숙련 충분
아웃랜드 장가르습지대 남쪽의 야생늪마을의 상자(300-340)
나그란드의 킬소로우 요새의 상자(325-350)

350-400
노스렌드에선 훔치기로 상자습득후 숙련올리기가 무난히 가능

훔치기 획득 상자

인간형 몹에게 아래의 매크로로 훔치기를 사용하면 잠금 상자가 나와서 숙련에 도움이 되지만 숙련 200이하에선
상자의 숙련이 올리기 애매한 부분이 있습니다.

#showtooltip 기절시키기
/시전 [nostealth,nocombat]은신
/시전 [stealth]기절시키기
/시전 [stealth]훔치기

#showtooltip 비열한 습격
/시전 [nostealth,nocombat]은신
/시전 [stealth]훔치기
/시전 [stealth]비열한 습격

위 2개의 매크로 즉 기절과 비습에 훔치기 매클을 첨부한 것이라면 인간형 몹에게 잠긴 상자를 얻을수있습니다.

 

 

 

반응형
posted by 지긋이 2019. 9. 20. 11:51

정렬에 흔히 사용하는 Order by에서 DESC, ASC 외에 조건을 주고 싶을 때가 있다.

특히, 정렬을 하는데 Null이 문제가 될 경우 아래와 같이 사용해 보자.

Order by 컬럼명 DESC Nulls Last => Null값을 뒤로 나오도록 함
Order by 컬럼명 DESC Nulls First => Null값을 먼저 나오도록 함

작성예>
SELECT * 
FROM TABLE명
ORDER BY COLUMN명1, COLUMN명2 NULLS FIRST, COLUMN명3 DESC NULLS LAST;

 

반응형