테이블 컬럼 카멜 표기법 변환기

테이블 컬럼 카멜 표기법 변환기

이 프로그램을 통해 Underscore Notation으로 표기된 테이블 컬럼명을 Camel Notation으로 변환된 자바 필드명으로 변경할 수 있다.

사용법

  1. 테이블정의서에서 복사한 컬럼명을 왼쪽 Textarea에 붙여넣는다.
  2. 자동으로 Camel Notation으로 변경된 결과가 우측 Textarea에 표시된다.
  3. 필요한 경우 여러가지 Conversion Style을 선택할 수 있다.
    • Basic: 기본적인 Camel Notation 변환만 수행
    • VO: 자바의 필드 선언문으로 변환 (Hibernate Annotation도 추가로 지정 가능)
    • ResultMap: iBatis에서 사용하는
    • Select: iBatis에서 사용하는 select 쿼리문으로 변환
    • Insert: iBatis에서 사용하는 insert 쿼리문으로 변환
    • Update: iBatis에서 사용하는 update 쿼리문으로 변환
    • Delete: iBatis에서 사용하는 delete 쿼리문으로 변환
  4. 우측 Textarea의 결과를 복사하여 필요한 곳에서 사용한다.
Configurations

Conversion Style
             


 

236D98445863544C1A.htm
22.9 kB
Posted by 사라링

사용자 -> WEB1 -> 이노릭스(파일첨부) -> was1
                        <----파일명(실제),서버파일명(동일파일명이 존재할경우 인덱스 포함 abc(1).jpg
              WEB1 -> WAS1(파일COMM) -> ECM(임시폴더명 및 서버파일명 전달)
문제: 이노릭스 의 서버파일정보가 WEB 서버에 도착 한 이후  WAS1,2 SHUT DOWN 

          재기동 WAS2가 선가동시 WEB1 -> WAS2 에 접속 가능
          동일한 파일명이 WAS2 에 존재 할 경우 파일명만 같은 엉뚱한 파일을 ECM 에 전달

**추가 : 확장자명 가져 오는 부분 수정 / 확장자가 4글자 일 경우 문제됨(. 이 사라짐)  


해결 서버파일명을 UUID 이용 저장 되도록 수정
uploadUrl 확인  보통 upload.jsp 사용 
/*추가 inport */  
<%@ page import="java.util.UUID" %>

<%@ page import="org.apache.commons.io.FilenameUtils" %>

String _action = uploader.getParameter("_action");
/*수정 시작 */
String _orig_filename   = uploader.getParameter("_orig_filename");  // 원본 파일명
        if("getFileInfo".equals(_action)) {
              String extension = "."+FilenameUtils.getExtension(_orig_filename);

            //String extension = _orig_filename.substring(_orig_filename.length()-4,_orig_filename.length());
            /*
                  업로드 시 서버에 저장되는 파일 명 변경 
                - uploader.setFileName(파일명+확장자);
                - 확장자 변경 시 파일은 열리지 않게 됩니다.
                - upload.run()전에 위치
            */
            String saveNm = UUID.randomUUID()+extension;
            uploader.setFileName(saveNm);   
        }
/*수정 종료 */

 

_new_filename: 서버파일명

 

 

'JSP' 카테고리의 다른 글

페이징 처리. JSP 설명까지 포함  (2) 2012.11.01
Problems warning 를 제거 하자.  (1) 2012.10.23
html excel 추출 하기.& Jquery excel 추출 하기.  (0) 2012.06.16
정규표현식 공식 및 응용 .  (0) 2012.05.08
기본JDBC 만들기  (0) 2012.05.08
Posted by 사라링

20220627-0001-3
20220627-0002-77.

SELECT '20220627-0001-3' AS RQST_NO_SEQ FROM DUAL
   UNION ALL
   SELECT '20220627-0002-77' AS RQST_NO_SEQ FROM DUAL

 

/

SELECT REGEXP_SUBSTR( RQST_NO_SEQ , '[^-]+', 1, 1) AS RQST_NO_1
      ,REGEXP_SUBSTR( RQST_NO_SEQ , '[^-]+', 1, 2) AS RQST_NO_2
      ,REGEXP_SUBSTR( RQST_NO_SEQ , '[^-]+', 1, 3) AS RQST_NO_3
 FROM (SELECT '20220627-0001-3' AS RQST_NO_SEQ FROM DUAL
   UNION ALL
   SELECT '20220627-0002-77' AS RQST_NO_SEQ FROM DUAL);

 

--결과

 

 

'정규식' 카테고리의 다른 글

정규식 숫자 제외하기 eval사용 하기.  (0) 2013.08.30
정규식 .  (0) 2012.08.24
정규식 .  (0) 2012.08.24
이메일 정규식  (0) 2012.08.08
Posted by 사라링

조건데이터 생성

//조회조건 생성
for (ir = 0; ir < this.ds_grup.getRowCount(); ir++) {

this.strUntCd += this.ds_grup.getColumn(ir, "BUDG_GRUP_CD") + ",";

}
this.ds_search.setColumn(0, "SCH_BUDG_GRUP_CD2", this.strUntCd);

 

//.xml 에 동적쿼리

<isNotEmpty property="SCH_BUDG_GRUP_CD2">
  AND B.BUDG_GRUP_CD IN ( SELECT  REGEXP_SUBSTR(v, '[^,]+', 1, LEVEL)  AS LIST FROM  (SELECT #SCH_BUDG_GRUP_CD2# v FROM dual) CONNECT BY LEVEL <![CDATA[<=]]> LENGTH(v) - LENGTH(REPLACE(v, ',')))
</isNotEmpty>

 

/*

파라미터 값 : 'B2022-0020,B2022-0098,'

 

쿼리시 적용

 

*/

 

 

Posted by 사라링


/* 그리드 쉬프트키로 멀티선택
 * e : Grid01_oncellclick의 이벤트 e
 * dsId : 데이터셋 ex) this.ds_list
 * columnId : 체크박스 ex) isChecked
 */
this.fn_act_shiftCheck = function (e, dsId, columnId) 
{
if (e.shiftkey) {

var chk = 0;

if ((e.row >= e.oldrow && dsId.getCaseCount(columnId + "!='1'", e.oldrow, e.row+1) > 0)
 || (e.oldrow >= e.row && dsId.getCaseCount(columnId + "!='1'", e.row, e.oldrow+1) > 0)) {
chk = 1;
} else {
chk = 0;
}

dsId.set_enableevent(false);
for (var i=0; i<dsId.getRowCount(); i++) {

if ((e.row >= e.oldrow && e.row >= i && i >= e.oldrow)
 || (e.oldrow >= e.row && e.oldrow >= i && i >= e.row)) {
dsId.setColumn(i, columnId, chk);
}
}
dsId.set_enableevent(true);
}
};

/* 그리드의  event 온셀클릭  아래와 같이 실행

this.Grid01_oncellclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo)
{
       this.fn_act_shiftCheck(e,this.ds_list,"isChecked");
};

 

*/

 

시작점 체크 

Shift + 체크

 

범위 체크 

 

Posted by 사라링

✓, ✔, ☑

 

특수문자랑 그림문자 기호

✿ ☺ ☻ ☹ ☼ ☂ ☃ ⌇ ⚛ ⌨ ✆ ☎  ⌘ ⌥ ⇧ ↩ ✞ ✡ ☭ ← → ↑ ↓ ➫ ⬇ ⬆ ☜ ☞ ☝ ☟ ✍ ✎ ✌ ☮ ✔ ★ ☆ ♺ ⚑ ⚐ ✉ ✄ ⌲ ✈ ♦ ♣ ♠ ♥ ❤ ♡ ♪ ♩ ♫ ♬ ♯ ♀ ♂ ⚢ ⚣ ❑ ❒ ◈ ◐ ◑ ✖ ∞ « » ‹ › “ ” ‘ ’ „ ‚ – — | ⁄ \ [ ] { } § ¶ ¡ ¿ ‽ ⁂ ※ ± × ~ ≈ ÷ ≠ π † ‡ ¥ € $ ¢ £ ß © ® @ ™ ° ‰ … · • ● ▲ ▼ ◀ ▶ ◢ ◣ ◥ ◤ △ ▽ ◿ ◺ ◹ ◸ ▴ ▾ ◂ ▸ ▵ ▿ ◃ ▹ ◁ ▷ ◅ ▻ ◬ ⟁ ⧋ ⧊ ⊿ ∆ ∇ ◭ ◮ ⧩ ⧨ ⌔ ⟐ ◇ ◆ ◈ ⬖ ⬗ ⬘ ⬙ ⬠ ⬡ ⎔ ⋄ ◊ ⧫ ⬢ ⬣ ▰ ▪ ◼ ▮ ◾ ▗ ▖ ■ ∎ ▃ ▄ ▅ ▆ ▇ █ ▌ ▐ ▍ ▎ ▉ ▊ ▋ ❘ ❙ ❚ ▀ ▘ ▝ ▙ ▚ ▛ ▜ ▟ ▞ ░ ▒ ▓ ▂ ▁ ▬ ▔ ▫ ▯ ▭ ▱ ◽ □ ◻ ▢ ⊞ ⊡ ⊟ ⊠ ▣ ▤ ▥ ▦ ⬚ ▧ ▨ ▩ ⬓ ◧ ⬒ ◨ ◩ ◪ ⬔ ⬕ ❏ ❐ ❑ ❒ ⧈ ◰ ◱ ◳ ◲ ◫ ⧇ ⧅ ⧄ ⍁ ⍂ ⟡ ⧉○ ◌ ◍ ◎ ◯ ❍ ◉ ⦾ ⊙ ⦿ ⊜ ⊖ ⊘ ⊚ ⊛ ⊝ ● ⚫ ⦁ ◐ ◑ ◒ ◓ ◔ ◕ ⦶ ⦸ ◵ ◴ ◶ ◷ ⊕ ⊗ ⦇ ⦈ ⦉ ⦊ ❨ ❩ ⸨ ⸩ ◖ ◗ ❪ ❫ ❮ ❯ ❬ ❭ ❰ ❱ ⊏ ⊐ ⊑ ⊒ ◘ ◙ ◚ ◛ ◜ ◝ ◞ ◟ ◠ ◡ ⋒ ⋓ ⋐ ⋑ ⥰ ╰ ╮ ╭ ╯ ⌒ ⥿ ⥾ ⥽ ⥼ ⥊ ⥋ ⥌ ⥍ ⥎ ⥐ ⥑ ⥏ ╳ ✕ ⤫ ⤬ ╱ ╲ ⧸ ⧹ ⌓◦ ❖ ✖ ✚ ✜ ⧓ ⧗ ⧑ ⧒ ⧖ _ ⚊ ╴ ╼ ╾ ‐ ⁃ ‑ ‒ - – ⎯ — ― ╶ ╺ ╸ ─ ━ ┄ ┅ ┈ ┉ ╌ ╍ ═ ≣ ≡ ☰ ☱ ☲ ☳ ☴ ☵ ☶ ☷ ╵ ╷ ╹ ╻ │ ▕ ▏ ┃ ┆ ┇ ┊ ╎ ┋ ╿ ╽ ⌞ ⌟ ⌜ ⌝ ⌊ ⌋ ⌈ ⌉ ⌋ ┌ ┍ ┎ ┏ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿ ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╏ ║ ╔ ╒ ╓ ╕ ╖ ╗ ╚ ╘ ╙ ╛ ╜ ╝ ╞ ╟ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬

 

특수문자랑 그림문자 기호

⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ➀ ➁ ➂ ➃ ➄ ➅ ➆ ➇ ➈ ➉ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⓿ ❶ ❷ ❸ ❹ ❺ ❻ ❼ ❽ ❾ ❿ ➊ ➋ ➌ ➍ ➎ ➏ ➐ ➑ ➒ ➓ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇

¹ ² ³ ↉ ½ ⅓ ¼ ⅕ ⅙ ⅐ ⅛ ⅑ ⅒ ⅔ ⅖ ¾ ⅗ ⅜ ⅘ ⅚ ⅝ ⅞∞ ⟀ ⟁ ⟂ ⟃ ⟄ ⟇ ⟈ ⟉ ⟊ ⟐ ⟑ ⟒ ⟓ ⟔ ⟕ ⟖ ⟗ ⟘ ⟙ ⟚ ⟛ ⟜ ⟝ ⟞ ⟟ ⟠ ⟡ ⟢ ⟣ ⟤ ⟥ ⟦ ⟧ ⟨ ⟩ ⟪ ⟫ ⦀

Posted by 사라링

By KBK

 

서비스 만들때 특수문자 사용 어떻게
안됨, xml 에서 직접 생성

탭 내부에서 줌인아웃 시 화면 안보이는거
버그

컴퍼넌트 클릭 시 가운데 + 기능무엇
머 맞추는 건데 잇음

큇뷰 사용 시 매번 run 누르는 창 떠야하나
하단에서 체크해제

복사하고 싶은 컴퍼넌트 잡고 ctrl + 마우스 드래그

컴퍼넌트 잡고 ctrl + shift + 마우스 드래구 : 라인맞추기

복사 후 ctrl + shift + v : 원하는 옵셕 복사붙여넣기

크기+너비 똑같이 맞추기, 여백 맞추기 툴에서 가능 align 

손모양 Move : form 음수좌표 가능

오른쪽 상단 Step : 하나의 from에서 여러 form으로 표현

마우스영역 컴퍼넌트 선택 설정 : tools > options > Form Design > general > select type >Select Part 에서 설정

= 셀렉트 올은 영역 전체를 드래그 해야 선택 되고 셀렉트 파트는 일부분만 드래그 해도 선택 됨 



App Infomation == global

외부엔진연계 > lib 폴더에 추가작업 진행

TypeDefinition > Objects > 컴퍼넌트 초기 사이즈 수정 가능, PrefixID 도 

Generate > Regenerate : 전체 제너레이트

바인드 여부 확인 : ctrl + b

컴퍼넌트 생성 과 동시에 바인딩 : ctrl + dataset

expr 표현식
1. 사칙연산
EMPL_ID + FULL_NAME

2. 예약어
currow + 1

3. 데이터셋 메소드(대소문자 구분 중요)
comp.parent.ds_emp.getRowCount()
dataset.getSum()
나머지 메소드 찾는 방법 : F1 > Data Object >
getCaseSum ?!

4. 삼항연산자
조건 ? 참 : 거짓

5. 함수호출(로직 또는 통신으로 인한 속도저하 유의)
- 내부함수
- nexacro API 함수

keystring
G:  그룹핑    S:  정렬
+  오름차순  -  내림차순
ex) G:+GENDER,+MARRIED


영역 머지 시 alt 누르고 선택

row 고정 : this.grd_list.setFixedRow(row);

  
fittocontents
Menu 의 내부 컨텐츠영역이 컨텐츠 내용에 맞게 
자동조정되는 영역을 설정하는 속성


Posted by 사라링

windy 실시간 기상 영상

2019. 10. 9. 17:36

'HTML5.0' 카테고리의 다른 글

HTML --> PDF 파일로 변환 하기 . 펌) 정윤재님 노트  (0) 2013.04.05
div 불투명 깔기 . 소스  (0) 2012.06.08
html animation  (0) 2012.06.08
div의 overflow 및 postion  (0) 2012.06.07
캔버스 위에 div 를 올리자.  (0) 2012.06.05
Posted by 사라링

넥사크로 사용중 갑자기 너무 느려질 경우 .. 

( 넥사 화면 전환 이나 Properties 값을 입력 중에 비정상 적으로 느려 지는 경우) 

 

재설치 하더라도 라이센스 및 옵션 관련 정보 등을 apps 쪽에 저장 되기 때문에 그쪽을 별도로 지우지 않는 이상

 

소용이 없다. 따라서 해당 폴더를 찾아 지우거나. 옵션을 초기화 해야 한다. 

 

tools - > options 

 

에서 왼쪽 하단의 옵션 설정 값을 디폴트 값으로 변경 해 보자. 

 

이유:  예상 하건데.  정확히 알수는 없었지만. 옵션 기능을 체크 하여 수정 중에 Generate 쪽이나 표현 항목 중에 비정상적인 동작을 하는 옵션이 있어 실수로 해당 사항을 체크 하는 경우 도저히 사용 할수 없을 정도로 느려 지는 현상이 발생

한다. ( 넥사크로만 느려진다면 100% 의심 할만 하다) 

 

해결 : 지우거나 옵션을 찾아 보려고 하지 말고 초기화 하자. 라이센스 나 General 쪽의  Generate 등의 경로는 유지 되니 ..

 

 

 

Posted by 사라링

넥사크로 라디오 박스 적용 하기 




처음 라디오 박스를 그리면 위와 같은 형태로 나오는데

해당 오브젝트에 두개의 컬럼을 가지는 데이터셋을 바인딩 해야만 일반적인 라디오 박스형태로 보일수 있다. 




ds_code_01

라디오박스의 형태를 처리하기 위해 데이터셋을 생성 한 이후에 아래와 같이 바인딩 한다. 


실제데이터가 아닌 형태설정에 데이터 셋을 바인딩 하는것을 주의 해야 한다.

쿼리에서 가져오는 실제데이터는 바인딩이 아니라 지정이다.(마지막에 처리)

순서는 innerdataset -> codecolumn-> datacolumn 순으로 지정 

value 의 값은 기본 값

direction 은 세로(기본) 로 보여줄지 가로로 보여줄지를 결정 


여기 까지 처리되었다면 아래와 같이 정상적인 라디오 박스를 볼수 있다. 





라디오 박스는 실제 값을 가져 와야 함으로 실제 데이터를 가져오는 값을 bind.info - > appearance.value 에 지정 한다. 


끝. ! 




Posted by 사라링



문제:

넥사크로  디자인 작업(inputBox 추가)-> 데이터 셋을 바인드->  DB조회시 input 박스가 모두 디스에이블 처리 되어 문제 발생 



위와 같이 그린 이후 조회문을 추가 하니 



실제 화면 에서 아래와 같이 모두 디스에이블 처리가 되어 문제 가발생 


원인 및 처리 : 넥사크로의 데이터 셋은 기본적으로 row 형태로 되어 있기 때문에 

일반적인 map 형태의 데이터가 확실하더라도  조회  데이터가 한건도 없는 경우 row가 없기 때문에 disabled 처리 된것으로 예상 된다. 


따라서 조회건이 한건 도 없을 가능 성이 있는 경우에는 강제로 insertRow 처리 해야 한다 아래와 같이. 


if(this.ds_main_frc.getRowCount() < 1){

this.ds_main_frc.insertRow();

}

끝.




Posted by 사라링

서론 없이 본론만 말해 보자. 


구매한 모니터(MB16AC)가 노트북에 따라. 바로 연동 되는것도 있고 연동 되지 않는것도 있었다. 


대부분의 블로그에서는 자동 연동 안되면 사이트에서 드라이브를 다운 받아 설치 하라고만 되어 있어 ASUS 에서 해당 기기 OS 를 선택하여 나오는 두개의


드라이브를 아무리 설치 해도 인식이 되지 않는 것이였다... 


알고 보니 + 버튼을 눌라 밑에 숨겨져 있던 드라이버를 찾아 설치 해야 하는 것이였다...


https://www.asus.com/kr/Monitors/MB16AC/HelpDesk_Download/




해당 화면에서 더보기 나 . 모두 표시 버튼을 누루면 


해당 다운 받은 것이 추가로 되어 있다. 해당 것이 바로 실제로 DP ALT 모드를 지원 하지 않는 노트북 에서 반드시 "필수" 로 다운 받아 설치 해야 하는 

드라이버 이다. 


일단 2018년 12월 7일부 자 제공 드라이브를 블로그에 링크를 추가 토록 한다. 


1. 모니터 지원 드라이브 (MB16AC/MB16xB)

   

2. 연결되어 있는 모니터(ASUS)의 설정을 PC 에서 변경 가능한 위젯  




끝!!!!!!!!!!!!





'문제점 해결' 카테고리의 다른 글

JAVA Could not generate DH keypair  (1) 2016.05.04
통신보안 SSL 이란. IBM 발취  (0) 2012.10.19
Posted by 사라링

언제 부턴가.. 이클립스 에서 아이바티스 의 자동 완성 기능이 정상적으로 처리가 되지 않아 확인결과


기존 url 이 ( http://www.ibatis.com/dtd/sql-map-2.dtd  <-- 기존 )


지원을 하지 않아 발생 하며 , 지원이 되는 url 로 바꾸더라도 


최근 사이트의 경우 망분리로 인하여 외부 네트워크가 되지 않아 자동 완성이 안되는 상황이 많아 정리 토록 함. 


기존 xml 파일의 경우  아이바티스나 마이바티스 사용하는 경우 (예시는 아이바티스)


최상단에 . 


 <?xml version="1.0" encoding="euc-kr"?>

<!DOCTYPE sqlMap

PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"

"http://www.ibatis.com/dtd/sql-map-2.dtd">


와 같이 정의가 되어 있는데 . 기존의 경로가 다르거나 외부 접근이 안되는 경우 자동 완성이 안되는 것이다. 



접근이 가능한 경우 위 상단에 표시 되겠지만 현재 정상적으로 처리가 되지 않기 때문에 표시가 되지 않는다. 


따라서 dtd 파일을 로컬 PC 에 다운 받아 설정 하는 것이 가장 이상적이다. 


다운 경로 . http://ibatis.apache.org/dtd/

 

sql-map-2.dtd



해당 경로 에서 직접 sql-map-2.dtd 파일을 다운 받은 경우 이제 이클립스 에 등록을 해야 한다. 


preference > xml > xml catalog 

설정 에서 user specified enteris 에 포함을 시켜야 한다. 



입력 하는 부분은 두가지 인데 location  은 localpc 에 다운받은 dtd 파일을 넣으면 되고 (워크스페이스에 없다면 file system 클릭)

(공통 관리자가 workspace 에 포함 시키는 것도 좋은 방법 일듯 하다. 추가는 알아서 해야 겠지만.. 워크스페이스 경로는 개발자 마다 다름으로 xml 에 정의는 힘들듯.. )


key 부분에는 기존의 PUBLIC 으로 정의 되는 부분을 넣으면 된다. 

-//iBATIS.com//DTD SQL Map 2.0//EN




위와 같이 정상적으로 등록이 완료 되면 ( 자동완성이 안되는 경우 eclipse 종료후 다시 시작) 


 ctrl+space 가 안되는 


상황에서 하단과 같이 



정상적으로 아이바티스의 자동 완성기능이 작동 됨을 확인 할수 있다. 


끝!!!! 





Posted by 사라링

로또 생성 쿼리

2017. 2. 3. 17:12

SELECT A.GAME

        ,SUM (DECODE (RNUM, 1, LTNO, 0)) NUM1

        ,SUM (DECODE (RNUM, 2, LTNO, 0)) NUM2

        ,SUM (DECODE (RNUM, 3, LTNO, 0)) NUM3

        ,SUM (DECODE (RNUM, 4, LTNO, 0)) NUM4

        ,SUM (DECODE (RNUM, 5, LTNO, 0)) NUM5

        ,SUM (DECODE (RNUM, 6, LTNO, 0)) NUM6

    FROM (SELECT GAME

                ,LTNO

                ,RANK () OVER (PARTITION BY GAME ORDER BY DBMS_RANDOM.VALUE)

                    RNUM

            FROM (    SELECT CEIL (LEVEL / 45) GAME, MOD (LEVEL - 1, 45) + 1 LTNO

                        FROM DUAL

                  CONNECT BY LEVEL <= 9999

                    ORDER BY 1, DBMS_RANDOM.VALUE)) A

        ,(    SELECT LEVEL GAME

                FROM DUAL

          CONNECT BY LEVEL < 6) B 

   WHERE A.GAME = B.GAME

GROUP BY A.GAME

ORDER BY A.GAME

Posted by 사라링


//VO 객체의 독립성을 유지 하기 위해 변경 처리. 

//사용법은 주석 확인. 



package module.common.otherinterface ;


import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;


import com.base.SystemException;

import com.component.parameter.IParameterManagement;

import com.framework.core.Workspace;


/**

 * 각 프로세스(메소드 단위) 시간 1/10000 단위로 점검 프로그램 

 * procTSOBegin -> procTSOWork procTSOWork procTSOWork(프로세스 숫자 만큼) -> procTSOEnd

 * 

 * 1. 로직 instance 호출

 *  ProcessTimeSysOut procTSO = new ProcessTimeSysOut();

 * 

 * 2. 최초 호출

 *  procTSO.procTSOBegin("국내출장);

 * 

 * 3. 각 프로세스 단위로 각 각 사이에 계속 추가. 

 *    procTSO.procTSOWork("신규:신청번호 채번 or 기 신청서 변경 체크");

 *    .

 *    .

 *    procTSO.procTSOWork("출장신청기본/출장예산정보");

 *    .

 *    .

 *    procTSO.procTSOWork("출장자 및 여비정보");

 *    

 * 4. 로직 instance 종료

 *    procTSO.procTSOEnd();

 * 

 * 싱글톤 패턴 구현

 * @since 1.0

 */

public class ProcessTimeSysOut extends Workspace {

PTSOVO ptsovo;

//private static ProcessTimeSysOut procTSO;

/* 복수의 프로그램에서 사용 가능 함에 따라 싱글톤 패턴 사용시 프로세스 누적 시간등이 혼합될 가능성이 있어

 *  싱글톤 패턴 해제함.

 * 

 * private ProcessTimeSysOut(){}

public static ProcessTimeSysOut getInstance(){

if(procTSO==null){

procTSO = new ProcessTimeSysOut();

procTSO.proCnt = 0;

procTSO.fullTime = 0;

procTSO.beforTime = 0;

}

return procTSO;

}

*/

//프로세스 최초시작 및 타이틀 설정

public void procTSOBegin(String processNameParam){

long time = System.currentTimeMillis(); 

this.ptsovo = new PTSOVO();

this.ptsovo.setProcTSOKEY(time);

System.out.println("============================"+processNameParam+" 프로세스 검토 로직 시작 ============================\n");

System.out.println("process key number : "+this.ptsovo.getProcTSOKEY());

this.ptsovo.setBeforTime(time);

this.ptsovo.setProcTitle(processNameParam);

SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");

System.out.println("시작 시간 : "+dayTime.format(new Date(time))+"\n");

}

//프로세스 내의 작업 구분 요청(out 처리)

public void procTSOWork(String workName){

if(this.ptsovo!=null){

long nowtTime  = System.currentTimeMillis(); 

long processTime  = nowtTime - this.ptsovo.getBeforTime();

this.ptsovo.setFullTime(this.ptsovo.getFullTime()+processTime); 

this.ptsovo.setProCnt(this.ptsovo.getProCnt()+1);

//하단 sysout도출시 내용의 길이는 변경 하지 않도록 처리(30글자).

System.out.println(String.format("%03d",this.ptsovo.getProCnt())+"("+this.ptsovo.getProcTSOKEY()+")||"+this.ptsovo.getProcTitle()+" ==> "+String.format("%-30s",workName)+"======>"+processTime+" / "+this.ptsovo.getFullTime()+"\n");

this.ptsovo.setBeforTime(nowtTime);

}

}

//프로세스 검토 종료 로직

public void procTSOEnd(){

if(this.ptsovo!=null){

System.out.println("process key number : "+ptsovo.getProcTSOKEY());

long time = System.currentTimeMillis(); 

//최초 시작시 프로세스 시작 시간을 넣도록 함.

SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");

System.out.println("종료 시간 : "+dayTime.format(new Date(time)));

System.out.println("총 누적 시간: " +this.ptsovo.getFullTime());

System.out.println("검토 프로세스 숫자: "+this.ptsovo.getProCnt()+"\n");

System.out.println("============================"+this.ptsovo.getProcTitle()+" 프로세스 검토 로직 종료 ============================\n");

System.out.println();

}

}


}




package module.common.otherinterface;


import java.math.BigDecimal;

import java.util.ArrayList;


import module.mis.trans.TransItem;

import module.mis.trans.TransVat;




public class PTSOVO {// 프로세스 분석 구조 객체

private int  proCnt = 0;  //프로세스 순번 

private long fullTime =0; //총 누적 소요 시간 

private long beforTime=0; //프로세스 시작 시간

private long procTSOKEY =0 ; //프로세스 생성시 주요키 값 (차후 조회시 대상 키값을 기준으로 조회 할수 있도록 처리.

private String procTitle ;  //프로세스 타이틀

public int getProCnt() {

return proCnt;

}

public void setProCnt(int proCnt) {

this.proCnt = proCnt;

}

public long getFullTime() {

return fullTime;

}

public void setFullTime(long fullTime) {

this.fullTime = fullTime;

}

public long getBeforTime() {

return beforTime;

}

public void setBeforTime(long beforTime) {

this.beforTime = beforTime;

}

public long getProcTSOKEY() {

return procTSOKEY;

}

public void setProcTSOKEY(long procTSOKEY) {

this.procTSOKEY = procTSOKEY;

}

public String getProcTitle() {

return procTitle;

}

public void setProcTitle(String procTitle) {

this.procTitle = procTitle;

}

}















//선언 및 만들어둬야 할것 소스 . 


//class 전역 변수 


int  proCnt = 0;  //프로세스 순번 

long fullTime =0; //총 누적 소요 시간 

long beforTime=0; //프로세스 시작 시간


//class 내 추가메소드 / 별도의 class 로 만들어 외부 접근 해도 무방


public void proTimeSysOut(String processNameParam,String type){

//시작 처리 type : S

if("S".equals(type)){

System.out.println("============================"+processNameParam+" 프로세스 검토 로직 시작 ============================\n");

long time = System.currentTimeMillis(); 

//최초 시작시 프로세스 시작 시간을 넣도록 함.

beforTime = time; 

SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");

System.out.println("시작 시간 : "+dayTime.format(new Date(time))+"\n");

//종료 처리 type : E 

}else if("E".equals(type)){

System.out.println("============================"+processNameParam+" 프로세스 검토 로직 종료 ============================\n");

long time = System.currentTimeMillis(); 

//최초 시작시 프로세스 시작 시간을 넣도록 함.

SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");

System.out.println("종료 시간 : "+dayTime.format(new Date(time))+"\n");

System.out.println("총 누적 시간: " +fullTime+"\n");

System.out.println("검토 프로세스 숫자: "+proCnt);

//종료시 전역 변수 long ,cnt 값을 초기화 한다. 

proCnt = 0;  //프로세스 순번 

fullTime =0; //총 누적 소요 시간 

beforTime=0; //프로세스 시작 시간

//각 프로세스 검토 type : P

}else if("P".equals(type)) {

if(beforTime==0){

System.out.println("프로세스 검토 로직 시작 이 누락 되었습니다.");

}else {

long nowtTime  = System.currentTimeMillis(); 

long processTime  = nowtTime - beforTime;

fullTime += processTime;

//하단 sysout도출시 내용의 길이는 변경 하지 않도록 처리(30글자).

System.out.println(String.format("%03d",++proCnt)+"||"+String.format("%-30s",processNameParam)+"======>"+processTime+" / "+fullTime+"\n");

beforTime = nowtTime;

}

}

}



// 사용법!!!


//성능 검증내 에서 해당 메소드를 호출 . 

//최초

  proTimeSysOut("국내출장","S");


// 각프로세스 마다 첫번째 파라미터에 프로세스 명을 입력  2번째 파라미터는 무조건 "P"

proTimeSysOut("신규:신청번호 채번 or 기 신청서 변경 체크","P");


//종료 

   proTimeSysOut("국내출장","E");




// sysout log 확인시. 아래와 같이 나오면 정상. 



[16. 9. 23   13:20:31:458 KST] 00000272 SystemOut     O ======================================

[16. 9. 23   13:20:31:458 KST] 00000272 SystemOut     O [ module.mis.hrm.main.Hrm_4071]

[16. 9. 23   13:20:31:458 KST] 00000272 SystemOut     O [2016.09.23 13:20:31(458)]

[16. 9. 23   13:20:31:458 KST] 00000272 ExtendAction  I module.common.action.ExtendAction execute 트랜잭션 시작.....

[16. 9. 23   13:20:31:459 KST] 00000272 SystemOut     O [ tmSetTrpRqst ] Transaction Start

[16. 9. 23   13:20:31:459 KST] 00000272 SystemOut     O ============================국내출장 프로세스 검토 로직 시작 ============================


[16. 9. 23   13:20:31:459 KST] 00000272 SystemOut     O 시작 시간 : 2016-20-23 01:20:31


[16. 9. 23   13:20:31:500 KST] 00000272 SystemOut     O 001||신규:신청번호 채번 or 기 신청서 변경 체크     ======>41 / 41


[16. 9. 23   13:20:31:781 KST] 00000272 SystemOut     O 002||출장신청기본/출장예산정보                 ======>281 / 322


[16. 9. 23   13:20:31:964 KST] 00000272 SystemOut     O 003||출장자 및 여비정보                    ======>183 / 505


[16. 9. 23   13:20:32:006 KST] 00000272 SystemOut     O 004||출장지 및 경유지                     ======>41 / 546


[16. 9. 23   13:20:32:055 KST] 00000272 SystemOut     O 005||출장내용                          ======>50 / 596


[16. 9. 23   13:20:32:055 KST] 00000272 SystemOut     O 006||첨부파일 저장                       ======>0 / 596






'JAVA' 카테고리의 다른 글

펌) immutable 이란  (0) 2013.10.15
grid I U D 포멧 JAVA 셋팅 [티폼 기준]  (0) 2013.06.27
디폴트 생성자에 대하여 알아 봅시닥.  (0) 2012.07.10
Swing - windowBuilder 설치 하기.  (0) 2012.06.13
패키지 컴파일러  (0) 2012.05.15
Posted by 사라링

오라클 락 & 킬 lock kill

2016. 8. 12. 14:28

프로젝트에서 LOCK 이 자주 걸리는 문제가 발생하여 연구하던 중에 아래의 sql 문을 이용하여 lock 세션을 찾아서 관리할 수 있다는 것을 알았다. 그러나 이 SQL 은 System 유저만이 사용할 수 있다는  제약이 있다. 

LOCK 이 발생하게 되면 프로그램이 동작하다가 멈추고 기다리게 된다. 원인을 파악하는데 시간이 허비하게 되는데 알고 보니 테이블에 LOCK이 걸린 것이었다면 허탈함을 금할 수 없다.  자주 LOCK 이 걸리는 테이블이라면 SELECT 할 때 WAIT 타임을 1 정도로 주면 1초동안 LOCK 이 풀리기를 대기하다가 오류 처리되므로 개발자가 쉽게 LOCK 걸린 상황을 인지할 수 있다. 

-- 락걸린 테이블 확인 
SELECT  DO.OBJECT_NAME, DO.OWNER, DO.OBJECT_TYPE, DO.OWNER,
        VO.XIDUSN, VO.SESSION_ID, VO.LOCKED_MODE
FROM    V$LOCKED_OBJECT VO, DBA_OBJECTS DO
WHERE   VO.OBJECT_ID = DO.OBJECT_ID;

-- 해당 테이블에 LOCK 이 걸렸는지.
SELECT A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME
FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C
WHERE A.SID = B.SID AND B.ID1 = C.OBJECT_ID
AND B.TYPE='TM' AND C.OBJECT_NAME IN ('TB_CO_GENO');

-- 락발생 사용자와 SQL, OBJECT 조회
SELECT DISTINCT X.SESSION_ID, A.SERIAL#, D.OBJECT_NAME, A.MACHINE, A.TERMINAL,
                A.PROGRAM, B.ADDRESS, B.PIECE, B.SQL_TEXT
FROM V$LOCKED_OBJECT X, V$SESSION A, V$SQLTEXT B, DBA_OBJECTS D
WHERE X.SESSION_ID = A.SID AND 
X.OBJECT_ID = D.OBJECT_ID AND A.SQL_ADDRESS = B.ADDRESS 
ORDER BY B.ADDRESS, B.PIECE;

-- 현재 접속자의 SQL 분석
SELECT DISTINCT A.SID, A.SERIAL#,
       A.MACHINE, A.TERMINAL, A.PROGRAM,
       B.ADDRESS, B.PIECE, B.SQL_TEXT
FROM  V$SESSION A, V$SQLTEXT B
WHERE A.SQL_ADDRESS = B.ADDRESS
ORDER BY A.SID, A.SERIAL#, B.ADDRESS, B.PIECE


-- 락 세션 죽이기
  SELECT A.SID,   A.SERIAL#
  FROM V$SESSION A,  V$LOCK B,
       DBA_OBJECTS C
 WHERE A.SID = B.SID
   AND B.ID1 = C.OBJECT_ID
   AND B.TYPE = 'TM'
   AND C.OBJECT_NAME = 'TB_CO_GENO'
   
SID SERIAL#
--- -------
5   1
6   1

2. 다음 명령으로 SESSION들을 KILL한다.  ALTER SYSTEM KILL SESSION 'SESSION_ID, SERIAL#';
SQL> alter system kill session '5, 1';
SQL> alter system kill session '6, 1';


-- 락 세션 죽이는 sql 문 
SELECT DISTINCT X.SESSION_ID, A.SERIAL#, D.OBJECT_NAME, A.MACHINE, A.TERMINAL,
       A.PROGRAM, A.LOGON_TIME, 'ALTER SYSTEM KILL SESSION'''||A.SID||', '||A.SERIAL#||''';'
FROM GV$LOCKED_OBJECT X, GV$SESSION A, DBA_OBJECTS D
WHERE  X.SESSION_ID = A.SID AND X.OBJECT_ID = D.OBJECT_ID
ORDER BY LOGON_TIME;

Posted by 사라링

/* 테이블 컬럼 찾기 */
/* [sqlmap/mapper/com/cmm/sql-comcmm525.xml] selectTableList */SELECT   A.TABLE_NAME        ,B.COMMENTSFROM     ALL_TABLES A        ,ALL_TAB_COMMENTS BWHERE    A.TABLE_NAME = B.TABLE_NAMEAND      A.OWNER = B.OWNERAND      B.OWNER = 'USRFRMOWN'AND      ( A.TABLE_NAME NOT LIKE 'TEST%' AND A.TABLE_NAME NOT LIKE '%TEST' )AND      ( A.TABLE_NAME NOT LIKE 'TEMP%' AND A.TABLE_NAME NOT LIKE '%TEMP' )AND      A.TABLE_NAME LIKE '%%'AND      B.COMMENTS LIKE '%%'ORDER BY TABLE_NAME
/* [sqlmap/mapper/com/cmm/sql-comcmm525.xml] selectColumnList */SELECT   A.TABLE_NAME        ,(SELECT COMMENTS FROM ALL_TAB_COMMENTS WHERE TABLE_NAME = A.TABLE_NAME AND OWNER='USRFRMOWN') AS TABLE_COMMENTS        ,A.COLUMN_NAME        ,B.COMMENTS        ,CASE WHEN C.COLUMN_NAME IS NOT NULL THEN 'PK' END AS PK_YN        ,A.DATA_TYPE        ,A.DATA_LENGTH        ,A.DATA_PRECISION        ,A.DATA_SCALE        ,A.NULLABLE        ,A.COLUMN_IDFROM     ALL_TAB_COLUMNS A        ,ALL_COL_COMMENTS B        ,(    SELECT B.TABLE_NAME                    ,B.COLUMN_NAME              FROM   ALL_CONSTRAINTS A                    ,ALL_CONS_COLUMNS B              WHERE  A.OWNER = B.OWNER              AND    A.TABLE_NAME = B.TABLE_NAME              AND    A.CONSTRAINT_NAME = B.CONSTRAINT_NAME              AND    A.CONSTRAINT_TYPE ='P'              AND    A.OWNER = 'USRFRMOWN' ) CWHERE    A.OWNER = 'USRFRMOWN'AND      A.OWNER = B.OWNERAND      A.TABLE_NAME = B.TABLE_NAME(+)AND      A.COLUMN_NAME = B.COLUMN_NAME(+)AND      A.TABLE_NAME = C.TABLE_NAME(+)AND      A.COLUMN_NAME = C.COLUMN_NAME(+)AND      A.TABLE_NAME LIKE '%%'—AND      A.COLUMN_NAME LIKE '%LINK_RPRJ_NO%'—AND      A.COLUMN_NAME IN ('RSCHFND_APLY_NO','PROOF_SEQ')AND      B.COMMENTS LIKE '%매입%번호%'ORDER BY A.TABLE_NAME

Posted by 사라링

대상 사이트 에서 url 창에 넣어 실행 하거나 즐겨 찾기로 설정 하여 사용 하면 됨. 



javascript: function naver(q){ void(z=q.body.appendChild(q.createElement('script'))); void(z.language='javascript'); void(z.type='text/javascript'); void(z.src='http://userscripts.org/scripts/source/61326.user.js');} function selfw(w) { try{naver(w.document);} catch(e){} for (var i =0; i <w.frames.length; i++) { try{ selfw(w.frames[i]); } catch(e){} } } selfw(self);(function() { var e, i, all; document.onselectstart = null; document.oncontextmenu = null; all = document.getElementsByTagName("*"); for (i = 0; i < all.length; i += 1) { e = all[i]; e.onselectstart = null; e.oncontextmenu = null; } })();

Posted by 사라링

이클립스 에서 SVN 연결중  DH keypair 에러가 발생. 

url 이 https:// 인 ssl 보완 으로 되어 있음. 


JAVA Could not generate DH keypair

Icon

javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair

Cause

Icon

 

클라이언트 측 JAVA 버전이 7 이하 인 경우

아파치 버전 2.4.7부터 mod_ssl 1024비트 이상의 DH 파라미터를 사용하나 
JAVA 7이나 이하 버전은 1024비트 이상의 DH를 지원하지 않음

Reference: http://httpd.apache.org/docs/current/ssl/ssl_faq.html#javadh

Resolution

Icon


방법1: 클라이언트 측 JAVA 8 업데이트

방법2: 서버 측 인증서에 DH 파라미터 추가 

DH 파라미터 추가

인증서파일 내용 마지막에 아래 내용을 추가
-----BEGIN DH PARAMETERS-----
MIGHAoGBAP//////////yQ/aoiFowjTExmKLgNwc0SkCTgiKZ8x0Agu+pjsTmyJR
Sgh5jjQE3e+VGbPNOkMbMCsKbfJfFDdP4TVtbVHCReSFtXZiXn7G9ExC6aY37WsL
/1y29Aa37e44a/taiZ+lrp8kEXxLH+ZJKGZR7OZTgf//////////AgEC
-----END DH PARAMETERS-----
인증서 파일 위치
아파치홈/conf/extra/httpd-ssl.conf
// SSLCertificateFile "/certificate/ssl.crt" 인증서 위치


'문제점 해결' 카테고리의 다른 글

MB16AC 휴대용 모니터 드라이버 설치기.  (0) 2018.12.07
통신보안 SSL 이란. IBM 발취  (0) 2012.10.19
Posted by 사라링

트러스트 폼 에서 발생 했으나 자바스크립트 로직상 일반 html 에서도 동일한 증상이 일어 날것으로 예상. 


문제 발생 멀쩡 하게 사용 하던 팝업창 에서 

자식창 데이터 클릭 -> 부모창에 데이터 전송 과정에서 exception 처리로 인한 오류 발생


기존 opener  호출 함수. 

function doFg1DblClick(){

if(!fGridReturn("fg1")) return;

var obj = doc.addGrid("fg1").getRowObj(fg1.row);   // 선택된 그리드의 데이터를 OBJECT 로 변환 하는 함수.

try{

opener.javascript.popNrnd(obj);              // 부모창의 함수를 호출

}catch(exception){

alert(exceptioni);

}

window.close();

}


alert 창으로 아래와 같은 오류를 출력. 하지만 데이터는 이상없이 부모창으로 insert 처리 됨. ( 메시지내용은 실제론 단순 alert 이 아님으로 아래와 같이 캡쳐됨)





해당과 같은 오류의 상세 내역을 확인 하기 위해 exception 내용을 상세 하게 확인 할수 있는 추가 구현. 


기존 alert(exception); ====>을 


var output = '';

for (var i in exception) {

output += i + ' : ' + exception[i] + '\n';

}

alert(output);

으로 변경 





더 알수가 없게 되었다.. (하지만 해당 구문은 자바스크립트 오류 확인시  많은 도움이 될것 같다.)

해당과 관련 미친듯이 google 을 찾아본 결과 opener 함수 내에서 실행되는 함수 중에 구현 되지 않은 함수가 있는 경우 스크립트 오류가 아닌

object 오류나 syntax 오류로 표기 될수 있다는 글을 확인 했고 

자식창및 부모창을 번갈아 가며 다른 파일로 호출 테스트 해 본 결과 자식창이 아닌 부모창에 문제가 있다는 것을 확인


확인해본 결과 함수 호출 과정에서 기존에 사용 하던 js 파일을 제거 하고 해당 기능과 관련된 공통 기능 js 파일을 스크립트 하는 과정에서 실제 사용 한 

함수를 누락 하게 되어 발생 한 문제 였다. 


부모창 의 함수  (자식창에서 opener 로 호출 하는)

function popNrnd(obj){

fg1.valueMatrix(fg1.row, fg1.colRef("MNS_PROJ_CD_YN")) = "Y";

fg1.valueMatrix(fg1.row, fg1.colRef("RESPERSONNO")) = obj.RESPERSONNO; //부처사업코드

fg1.valueMatrix(fg1.row, fg1.colRef("PRJNAME")) = obj.PRJNAME; //부처과제명

fg1.valueMatrix(fg1.row, fg1.colRef("MNS_PROJ_CD")) = obj.PRJNO; //협약일련번호

fSetFlag("fg1",fg1.row);     //  <== 문제를 발생 시킨 누락 함수. 

model.refresh();

}


위와 같이 지역함수 안에 구현된 function 의 경우 호출 대상이 자신(부모)인 경우에는 function  누락 으로 인한 스크립트 오류가 발생 하지만 

자신이 아닌 자식창에서 호출할 경우 제대로 스크립트 오류가 발생 하지 않는 상태로 exception 처리 됨을 확인 할수 있었다. 












Posted by 사라링

BLOG main image
.. by 사라링

카테고리

사라링님의 노트 (303)
JSP (32)
J-Query (41)
디자인패턴 (1)
JAVA (24)
스트러츠 (3)
안드로이드 (11)
오라클 (45)
우분투-오라클 (1)
이클립스메뉴얼 (6)
스프링3.0 (23)
자바스크립트 (11)
HTML5.0 (17)
정보처리기사 (1)
기타(컴퓨터 관련) (1)
문제점 해결 (3)
프로젝트 (2)
AJAX (4)
하이버네이트 (3)
트러스트폼 (11)
Jeus (2)
재무관리(회계) (5)
정규식 (5)
아이바티스 (8)
취미 (2)
소프트웨어 보안 관련모음 (0)
정보보안기사 (6)
C언어 베이직 및 프로그램 (3)
보안 관련 용어 정리 (2)
넥사크로 (6)
웹스퀘어_ (0)
Total :
Today : Yesterday :