블로그 이미지
JinStudio의 아이디어와 정보를 모아놓는 블로그.
JinStudio

공지사항

최근에 올라온 글

최근에 달린 댓글

글 보관함

calendar

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

ORACLE LOOP문 문법

2014. 4. 2. 09:35 | Posted by JinStudio

출처 : 꿈꾸는 개발자

http://www.gurubee.net/lecture/1057


LOOP문 문법

  • EXIT 문이 사용되었을 경우, 무조건 LOOP문을 빠져나간다.
  • EXITH WHEN 이 사용될 경우 WHEN 절에 LOOP를 빠져 나가는 조건을 제어 할 수 있다.

LOOP문 예제

 
-- DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용
SQL> SET SERVEROUTPUT ON ;  

SQL> DECLARE

        v_cnt NUMBER := 100;

     BEGIN

        DBMS_OUTPUT.ENABLE ;

        LOOP
            INSERT INTO emp(empno, ename , hiredate)
            VALUES(v_cnt, 'test'||to_char(v_cnt),  sysdate);

            v_cnt := v_cnt+1;

            EXIT WHEN v_cnt > 110;

        END LOOP;

        DBMS_OUTPUT.PUT_LINE('데이터 입력 완료');
        DBMS_OUTPUT.PUT_LINE(v_cnt-100 || '개의 데이터가 입력되었습니다');

     END;           
     /

데이터 입력 완료
11개의 데이터가 입력되었습니다 
 
        

WHILE LOOP문 예제

WHILE LOOP문은 FOR문과 비슷하며, 조건이 TRUE일 경우 만 반복되는 LOOP문 이다.

 
SQL> DECLARE

       v_cnt number := 100; 
	
     BEGIN
	
       DBMS_OUTPUT.ENABLE; 
	
       WHILE v_cnt < 110 LOOP 
	
           INSERT INTO emp(empno, ename , hiredate) 
           VALUES(emp_seq.nextval, 'test', sysdate); 
	
           v_cnt := v_cnt+1; 
	
           EXIT WHEN v_cnt > 110; 
	
       END LOOP; 
	
       DBMS_OUTPUT.PUT_LINE('데이터 입력 완료'); 
       DBMS_OUTPUT.PUT_LINE(v_cnt-100 || '개의 데이터가 입력되었습니다'); 
		
    END; 
    / 
        



'Work Source > DATABASE' 카테고리의 다른 글

ORA-01000: 최대 열기 커서 수를 초과했습니다  (0) 2013.07.04
Oracle HINT  (0) 2012.12.27

Tomcat의 maxParameterCount 설정

2013. 7. 4. 10:03 | Posted by JinStudio

웹 페이지에서 한번에 넘기는 파라미터가 총 10000개가 넘어갈때 에러가 떳다.


Tomcat의 maxParameterCount 기본 설정이 10000개로 제한되어 있어서 그런데


그럴 경우엔 Tomcat 또는 다른 WAS의 server.xml을 수정해 준다.


<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" maxParameterCount="10000000"/>


이렇게 명시적으로 늘려도 되고


maxParameterCount="-1" 로 해 놓으면 무제한으로 설정된다.




회사 프로젝트하다가 동료가 발견한 해결방법인데

오라클 오픈커서수(http://jinstudio.tistory.com/44)와 함께 설정해 주는것이 좋을듯...



오라클에서 'ORA-01000: 최대 열기 커서 수를 초과했습니다'라는 에러가 날 경우

 

JAVA소스에서 cursor가 제대로 닫히는지 혹은 너무 많이 열려있는지 확인해보고

 

SQL*Plus에서 'SYSDBA'로 접속 후 현재 open_cursors의 셋팅 값을 확인해본다.

 

 

 SQL> show parameter cursors;

 

 NAME TYPE VALUE
 ------------------------------------ ----------- ---------------------
 open_cursors integer 300
 session_cached_cursors integer 0

 

 

값을 늘려야 할 때는..

 

 

 SQL> ALTER SYSTEM SET open_cursors=2000;

 

 System altered.





WAS의 maxParameterCount 설정도 함께 해주면 좋을듯...


 

'Work Source > DATABASE' 카테고리의 다른 글

ORACLE LOOP문 문법  (2) 2014.04.02
Oracle HINT  (0) 2012.12.27

Oracle HINT

2012. 12. 27. 15:41 | Posted by JinStudio

 

  아래 강좌는 Oracle8i 버전을 기준으로 작성 되었습니다. Hint에 대한 더 많은 정보는 오라클클럽 위키의 문서를 참고해 주시기 바랍니다.

 

/*+ ALL_ROWS */

  ALL_ROWS는 Full Table Scan을 선호하며 CBO(Cost Based Optimization)는 default로 ALL_ROWS를 선택 합니다.

 
SQL> SELECT /*+ ALL_ROWS */  ename, hiredate 
     FROM emp  
     WHERE ename like '%%%';
       
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=HINT: ALL_ROWS (Cost=1 Card=5 Bytes=80)
   1    0   TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=5 Bytes=80)
    

 

/*+ CHOOSE */

  Hint Level의 CHOOSE는 RBO(Rule Based Optimization)인지 CBO(Cost Based Optimization) 인지를 선택 합니다. 만약 주어진 table의 통계 정보가 없다면 Rule Based 접근 방식을 사용 합니다.

 

/*+ FIRST_ROWS */

  Full Table Scan보다는 index scan을 선호하며 Interactive Application인 경우 best response time을 제공 합니다. 또한 sort merge join보다는 nested loop join을 선호 합니다.

 
SQL> SELECT /*+ FIRST_ROWS */  ename 
     FROM emp 
     WHERE empno=7876;
 
Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=HINT: FIRST_ROWS (Cost=1 Card=1 Bytes=20)
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'EMP' (Cost=1 Card=1 Bytes=20)
   2    1     INDEX (RANGE SCAN) OF 'PK_EMP' (UNIQUE) (Cost=1 Card=1)
    

 

/*+ RULE */

  Rule Based 접근 방식을 사용하도록 지정 합니다.

 

/*+ CLUSTER(table_name) */

  Cluster Scan을 선택하도록 지정한다. 따라서 clustered object들에만 적용 됩니다.

 

/*+ FULL(table_name) */

  Table을 Full Scan하길 원할 때 사용 합니다.

 

/*+ HASH(table) */

  Hash scan을 선택하도록 지정한다. 이 hint는 HASHKEYS parameter를 가지고 만들어진 cluster내에 저장된 table에만 적용이 됩니다.

 

/*+ INDEX(table_name index_name) */

  지정된 index를 강제적으로 쓰게끔 지정 합니다.

 

/*+ INDEX_ASC(table_name index_name) */

  지정된 index를 오름차순으로 쓰게끔 지정 합니다. Default로 Index Scan은 오름차순 입니다

 

/*+ INDEX_DESC(table_name index_name) */

  지정된 index를 내림차순으로 쓰게끔 지정 합니다.

  아래 예제는 제일 큰 것 하나만 조회되므로, max 함수의 기능을 대신할 수 있습니다.

 
SQL> SELECT /*+ index_desc(emp pk_emp) */  empno
     FROM   emp
     WHERE  rownum = 1 ;
    

 

/*+ INDEX_FFS(table index) */

  Full table scan보다 빠른 Full index scan을 유도 합니다.

 

/*+ ORDERED */

  From절에 기술된 테이블 순서대로 join이 일어나도록 유도 합니다.

 

/*+ USE_HASH (table_name) */

  각 테이블간 HASH JOIN이 일어나도록 유도 합니다.

 

*+ USE_MERGE (table_name) */

  지정된 테이블들의 조인이 SORT-MERGE형식으로 일어나도록 유도 합니다.

 

/*+ NOPARALLEL(table_name) */

  NOPARALLEL hint를 사용하면, parallel query option을 사용하지 않도록 할 수 있다.

 

/*+ PARALLEL(table_name, degree) */

  PARALLEL hint를 사용하면 query에 포함된 table의 degree를 설정할 수 있습니다.

  예를 들어, 다음과 같이 hint를 적어 degree 4로 parallel query option을 실행하도록 할 수 있습니다. 이 때 parallel이란 글자와 괄호( '(' )사이에 blank를 넣지 않도록 주의해야 합니다.

 
SQL> SELECT /*+ PARALLEL(emp, 4) */   * 
     FROM emp;
    

 

DEGREE의 의미 및 결정

  Parallel Query에서 degree란 하나의 operation 수행에 대한 server process의 개수 입니다. 이러한 degree 결정에 영향을 주는 요인들에는 다음과 같은 것들이 있습니다.

  • (1) system의 CPU 갯수
  • (2) system의 maximum process 갯수
  • (3) table이 striping되어 있는 경우, 그 table이 걸쳐있는 disk의 갯수
  • (4) data의 위치 (즉, memory에 cache되어 있는지, disk에 있는지)
  • (5) query의 형태 (예를 들어 sorts 혹은 full table scan)

  한 사용자만이 parallel query를 사용하는 경우, sorting이 많이 필요한 작업과 같은 CPU-bound 작업의 경우는 CPU 갯수의 1 ~ 2배의 degree가 적당하며, sorting보다는 table scan과 같은 I/O bound 작업의 경우는 disk drive 갯수의 1 ~ 2배가 적당합니다.

  동시에 수행되는 parallel query가 많은 경우에는 위의 각 사용자의 degree를 줄이거나 동시에 사용하는 사용자 수를 줄여야 합니다.


[ 출처 : 오라클클럽 http://www.oracleclub.com/lecture/1260 ]


'Work Source > DATABASE' 카테고리의 다른 글

ORACLE LOOP문 문법  (2) 2014.04.02
ORA-01000: 최대 열기 커서 수를 초과했습니다  (0) 2013.07.04

링크를 따라 가세요.

http://arshaw.com/xdate/

* 조건에 따른 색상 설정.
    초기화 과정에서는 그런 기능은 없습니다. 따라서 조회 XML안에 TR,TD에 속성을 넣으시거나 조회 후 현재와 같이 스크립트를 통해 주는 방법 밖에는 없습니다. 여기서 약간의 팁을 드리자면 보통 이런 작업을 할때는 스크립트와 시트 객체간의 호출이 많아질 수로 속도가 느려지게 됩니다. 따라서 최대한 속도를 빠르게 하기 위해서는 연산이 필요한 부분은 한번에 스크립트로 가져와 연산하고 이후 한꺼번에 반영하는 것이 좋습니다.

간단한 예를 보여드리자면 아래와 같습니다.

속도가 느려지는 작업 예)
for(var i=0;i<mySheet.LastRow;i++){
    if(mySheet.CellValue(i,8)<300){
        mySheet.CellFontColor(i,8) = mySheet.WebColor("#FF0000");
    }
}

속도가 빠른 작업 예)
//8번 컬럼의 전체 데이터를 string 형태로 받는다.
var data = mySheet.GetRangeValue(0,8,mySheet.LastRow,8);


//스크립트 안에서 모두 작업한다.
var dataArr = data.split("^");
var rtnArr = new Array();
for(var i=0;i<dataArr.length;i++){
    if(dataArr[i]<300){
        //300 보다 작은 값은 모두 rtnArr배열에 넣는다.
        rtnArr.push(i);
    }
}


//한번에 시트에 반영하기 위해 받은 내용을 갖고 XML을 만든다.
var xmlstr = "<?xml version='1.0'?><sheet><data>";
for(var i=0;i<rtnArr.length;i++){
    xmlstr += "<TR ROW='"+rtnArr[i]+"' COL='8'><TD COLOR='RED'></TD></TR>";
}
xmlstr += "</data></sheet>";

//만들어진 xml을 한번에 반영한다.
mySheet.LoadSearchXml(xmlstr , false, -1,true);

출처 : http://www.ibleaders.co.kr/

 

iBSheet 에서 Row크기가 커서 스크롤시 부드럽게 안넘어갈 때 팁!

 

기본적으로 Sheet상에서 스크롤시 Row별로 끊겨서 스크롤 되게 되는데 성과평가 작업하면서 KPI조회시 Sheet상에서 Row가 커서 부드럽게 스크롤이 되지 않았다.
그때는 Sheet상의 스크롤바를 없애고 Frame의 스크롤바를 이용하면 된다.

* ShowSubSum Method


특정 컬럼의 데이터를 기준으로 소계와 누계를 계산하여 표시한다.

Syntax

mySheet.ShowSubSum(StdCol, SumCols, [PosBottom], [Sort], [ShowCumulate], [CaptionCol],
[OtherColText], [AvgCols], [IsSumEx])

Parameters

Parameter Type 필수여부 Remark
StdCol Long/String 필수 소계를 계산할 기준 컬럼의 컬럼 Index 또는 SaveName
SumCols String 필수 소계가 계산되어야 할 컬럼 Index를 "|"로 연결한 문자열
PosBottom Integer 선택 소계를 표시할 위치 Default=-1
Sort Boolean 선택 기준 컬럼의 Sort 처리 여부. 소계를 표시 하기 위해 기준 컬럼의 값이 반드시 Sort 되어 있어야 함. Default=false
ShowCumulate Boolean 선택 소계에 대한 누계 표시 여부. Default=false
CaptionCol Long 선택 소계 대표 글자인 "소계 : " + 기준값을 설정할 컬럼. Default=숨겨지지 않은 첫컬럼
OtherColText String 선택 소계 이외의 컬럼에 설정할 글자를 조합한 문자열. Defuault=""
AvgCols String 선택 소계 행에 평균으로 계산되어야 할 컬럼 Index를 "|"로 연결한 문자열. Defuault=""
IsSumEx Boolean 선택 상태가 삭제인 행의 계산 여부, Defuault=false

Return Value

없음

Remarks

이 함수는 소계와 누계를 계산해주는 기능으로 기존의 합계 기능과 달리 함수를 호출하는 순간의 데이터 그대로
소계와 누계가 계산 되므로 트랜잭션으로 소계가 계산되는 데이터가 바뀌더라도 소계 값은 자동으로 다시 계산
되지 않는다. 이 함수를 다시 호출하지 않는 이상 다시 계산되지 않으므로 주의 하여 사용한다.
소계 기능을 이용하여 합계 처럼 자동 계산되는 기능을 사용하고자 한다면 ComputeSum Property를 사용하여
대신할 수 있다. 샘플 예제 메뉴에서 "숫자연산설정 > 소계응용" 예제를 참조한다.

SumCols 인자는 소계와 누계가 계산 되어야 할 컬럼의 Index를 "|"로 연결한 문자열로 해당하는 컬럼에 소계와
누계가 계산되어 표시된다.

PosBottom 인자는 생성된 소계를 표시할 위치로서 값에 따라서 다음과 같이 표시된다.

PosBottom값 표시 위치
-1 기준 데이터 행의 하단 (기존의 true)
0 기준 데이터 행의 상단(기존의 false)
1 최상단, 해더 바로 아래
2 최하단, 합계 바로 위


ShowCumulate를 true로 설정하면 소계를 표시하고 그 아랫줄에 해당하는 소계의 누계가 계산되어 표시되고,
false로 설정하면 소계만 계산하여 표시된다. 누계 기능은 다음과 같이 계산된다. 첫번째 누계는 첫번째 소계와
동일하며, 두번째 누계는 첫번째 소계와 두번째 소계를 합한 것이고, 마지막 누계는 이전 소계들을 모두 합한
것이다. 누계 기능은 소계가 계산될 때만 표시 되는 기능으로 처리된다.


OtherColText 인자는 SumCols인자가 소계를 계산할 컬럼이라면 이 인자는 소계를 표시할 컬럼 이외의 컬럼에
원하는 글자를 설정하는 인자인다. 기본 구성은 "컬럼번호=설정할글자"로 하고, 컬럼이 여러개 인 경우 ";"로
연결하여 설정한다. 설정할글자에 "%s"를 설정하면 해당하는 데이터의 기준 행에 해당 컬럼 글자를 그대로
설정한다. 예를 들어 아래와 같이 설정하면 3컬럼과 5컬럼은 기준 행 글자를 그대로 설정하고, 6컬럼은 "소계"
라는 글자를 설정한다.

"3=%s;5=%s;6=소계"
"stockCd=%s;stockNm=%s;sTitle=소계"

2.0.0.1 버전 이후에는 %s로 설정 한 경우 기준 행의 글자와 함께 글자색도 그대로 설정한다. 또한 계산식을
설정할수 있다. 예를 들어 아래와 같이 소계행의 7컬럼의 값은 같은 소계행의 2 컬럼과 4컬럼을 합한 값에
7컬럼의 기준행의 값을 곱한 값으로 설정된다.

"3=%s;5=%s;6=소계;7=(|2| + |4|) * %s"
"stockCd=%s;stockNm=%s;sTitle=소계;price=(|amt1| + |amt2|) * %s"


AvgCols 인자는 평균으로 계산 되어야 할 컬럼의 Index를 "|"로 연결한 문자열로 해당하는 컬럼에 평균이
계산되어 표시된다. 누계가 계산될 시 평균은 누계에서 제외되어 계산된다.


소계를 표시하는 행은 첫번째 컬럼에
"소계 : "+기준값으로 표시되고, 누계를 표시하는 행은 "누계 : "+기준값 으로 표시된다.
이때 대표 글자를 변경하는 것은 MessageText Property를 이용하여 설정한다.

mySheet.MessageText("SubSum") = "소계";
mySheet.MessageText("Cumulate") = "누계";

IsSumEx 인자는 DataType이 dtAutoSumEx와 마찬가지로 트랜잭션 상태가 삭제이거나 RowSumable=false인
행은 소계 계산에서 제외할지 여부를 설정한다. 이 인자가 false이면 모든 데이터 행을 소계 계산에 포함하고,
인자가 true이면 트랜잭션 상태가 삭제이거나 RowSumable=false인 행은 소계 계산에서 제외한다.

이 속성의 기본 값은 false이다.
 

Example







 

최근들어 많이 참고하게 되는데 정말 유용함!! ㅎㅎ


 

White H5 Waffle SWT error 해결방법!

2012. 3. 2. 13:35 | Posted by JinStudio

 

White H5 Waffle SWT error 해결방법!


Error
화면


A SWT error has occurred. ...

이런 Error가 뜰 경우 최신swt.jar 파일을 패치 해 준다.


(
이클립스 사이트에서 쉽게 구할 수 있음)

패치 경로 waffle\plugins\org.eclipse.swt.win32_2.1.3\ws\win32\swt.jar

패치 후 (디자인도 약간 바뀜ㅋㅋㅋ 더 이쁜듯…!!!)



'Work Source' 카테고리의 다른 글

H5 패키지용 Weblogic 8.1 Log 작업  (0) 2012.03.02
이전 1 2 다음