마인드맵이라...

사는 얘기 2009. 1. 9. 17:38 Posted by galad
마인드맵이란?

마인드-생각의 맵-지도. 뭐 이 정도인듯.

http://wiki.modulestudy.com/index.php/마인드_맵이란_무엇인가%3F


활용법

자신의 생각을 정리하는 하나의 방법론으로써 정리/기억 등에 도움을 준다고 하는듯.
그냥 무언가에 대해 생각할 때, 정리할 때 사용하면 좋을듯.

http://blog.daum.net/_blog/BlogView.do?blogid=0GFjr&articleno=7154581#ajax_history_home


http://cafe.naver.com/mindmapmania.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=287
http://www.12manage.com/methods_mind_mapping_ko.html
http://moai.tistory.com/197

위를 참조.

'사는 얘기' 카테고리의 다른 글

[뭐지?] 알라딘 TTB 노출 중지  (2) 2009.01.11
Getting things done  (0) 2009.01.09
세상에 공짜란 없다?!  (0) 2009.01.07
One Hundred Pushups  (0) 2009.01.06
나도 어른인걸까  (0) 2007.12.04
  • 다소 쌩뚱맞긴 합니다만... ^^;; 
    통계작업에 유용하게 사용할 수 있는 달력테이블을 만들어서 사용하기도 합니다. 
    create table 달력 (년 varchar2(4), 월 varchar2(2), 일 varchar2(2), 년월일 varchar2(8)); 
    요로코롬 말이지요. 
    말씀하시는바와 같이 화면에 임의의 년에대한 모든 월데이터를 보인다던가.. 할때 유용하게 사용할 수 있지요.
    통계화면이 한두개가 아니다보니.. 요로코롬 미리 테이블을 구성한 후 join으로 이용하는것도 꽤 괜찮은 방법입니다. 
    DBA님이나 사수분께 의논해보심은 어떠시련지요. ^^;; 
    아니면.. 제 오래된 기억에 mssql 2000의 경우엔 템프테이블을 만들 수 있는 방법이 있었는데요.. 
    요 템프테이블을 달력테이블처럼 구성하여 사용하셔도 될듯 합니다. 
    그럼 ^^;;
  • dazzilove

from
http://okjsp.pe.kr/seq/117001

통계 시 실제 데이터가 없는 일/월/연을 0건으로 표시하기 위해서 위와 같은 처리가 필요.
아님

  • select 1 as month, 0 as cnt 
    from dual 
    union all 
    select 2 as month, 0 as cnt 
    from dual 
    union all 
    select 3 as month, 0 as cnt 
    from dual 
    union all 
    select 4 as month, 0 as cnt 
    from dual 
    union all 
    select 5 as month, 0 as cnt 
    from dual 
    .... 

    으로 가라로 뷰를 하나 만든다음에 outer join 하면 되지 않을까요?
  • mgcos

이건 넘 쿼리가 길어지는 듯....

/*OUTER JOIN 테스트용.
임시로 월간 캘린더 테이블을 만들어서 실제 데이타와 조인. 그런 다음 갯수를 세면 데이터가 없는 월의 것도 카운트 가능해진다
임시 테이블을 만들어서 데이타를 뽑아내긴 하였으나, 검색기간이 동적으로 변하므로 그것에 대한 처리는 어떻게 하는가?
실제 물리적인 테이블에 모든 데이타를 넣어두어 그것을 가지고 해야하지 않나?
*/
SELECT
    COUNT(EVT_CODE), MONTHLY
FROM
(
    SELECT
        R5E.EVT_CODE,
        /*CASE //이것은 필요없을 듯. MSSQL서 COUNT시 NULL은 자동으로 0으로 인식됨
            WHEN R5E.EVT_CODE IS NULL THEN 0
            WHEN R5E.EVT_CODE IS NOT NULL THEN 1
        END AS CODE_COUNT,*/
        CASE
            WHEN R5E.MON IS NULL THEN TM2.MON
            WHEN R5E.MON IS NOT NULL THEN R5E.MON
        END AS MONTHLY
    FROM
    (
        (
            SELECT EVT_CODE, CONVERT(CHAR(7), EVT_DATE, 121) AS MON FROM R5EVENTS
            WHERE CONVERT(CHAR(7), EVT_DATE, 121) BETWEEN '2008-12' AND '2009-01'
        ) R5E
        FULL OUTER JOIN
        (
            SELECT MON, CNT FROM
            (
                SELECT '2009-01' AS MON, 0 AS CNT FROM DUAL
                UNION ALL
                SELECT '2009-02' AS MON, 0 AS CNT FROM DUAL
                UNION ALL
                SELECT '2009-03' AS MON, 0 AS CNT FROM DUAL
                UNION ALL
                SELECT '2009-04' AS MON, 0 AS CNT FROM DUAL
                UNION ALL
                SELECT '2009-05' AS MON, 0 AS CNT FROM DUAL
                UNION ALL
                SELECT '2009-06' AS MON, 0 AS CNT FROM DUAL
                UNION ALL
                SELECT '2009-07' AS MON, 0 AS CNT FROM DUAL
                UNION ALL
                SELECT '2009-08' AS MON, 0 AS CNT FROM DUAL
                UNION ALL
                SELECT '2009-09' AS MON, 0 AS CNT FROM DUAL
                UNION ALL
                SELECT '2009-10' AS MON, 0 AS CNT FROM DUAL
                UNION ALL
                SELECT '2009-11' AS MON, 0 AS CNT FROM DUAL
                UNION ALL
                SELECT '2009-12' AS MON, 0 AS CNT FROM DUAL
            ) TM
        ) TM2
        ON TM2.MON = R5E.MON
    )
) A
GROUP BY
    MONTHLY

길어졌다...

[log4j] 사용례

프로그래밍/Library 2009. 1. 8. 17:12 Posted by galad
패턴에 따른 로그의 예
1.
log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n

2009-01-08 16:27:37,464 ERROR [main] xml.XMLMain       ( XMLMain.java:165)     - JOURNALREQ03.xml XML 파일 전송 실패

2.
log4j.appender.rolling.layout.ConversionPattern=%d %-5p [%t] %-17c{2} %3x - %m%n

2009-01-08 16:35:14,335 INFO  [main] xml.XMLMain           - ===== 프로그램 종료 =====


로그 레벨 순서

OFF/FATAL/ERROR/WARN/INFO/DEBUG/TRACE/ALL의 순서. 맞나???

세상에 공짜란 없다?!

사는 얘기 2009. 1. 7. 09:23 Posted by galad






피디박스 회원이 아니시거나 수신거부 회원이신데도 본 메일을 받으셨다면, [고객센터]로 문의해 주시기 바랍니다.
본 메일은 발신전용메일입니다.
문의사항이 있으시면 피디박스(www.pdbox.co.kr)고객센터를 이용해주십시오.


이런 메일이 와서 혹해서 해볼라 했다.
혹시나 했더니 역시나 개인정보 활용에 동의하지 않으면 안된다한다.
교환권은 1만원짜리.
개인정보 활용에 동의했을 시 내 정보가 제공되는 회사는 적게 잡아 4개.
내가 내 개인정보를 스스로 만원에 파는 꼴이다.
쳇. 장난치나... 역시나 세상에 공짜는 없다..

'사는 얘기' 카테고리의 다른 글

Getting things done  (0) 2009.01.09
마인드맵이라...  (0) 2009.01.09
One Hundred Pushups  (0) 2009.01.06
나도 어른인걸까  (0) 2007.12.04
[펌] 삶에서 가장 좋은 것들  (0) 2007.11.29

리타 길들이기

감상문 2009. 1. 6. 20:00 Posted by galad
http://www.idsartcenter.co.kr/2008/03/

생애 처음 본 연극은 "지하철 1호선"이었고, 왜 보러 갔는지도 잘 기억나진 않지만 재밌게 봤었던 만은 기억하고 있다.
이번 "리타 길들이기"는 거의 6년만에 본 연극으로, 보러 가기 전 살펴본 평에서는 다들 재밌다고 해서 살짝 기대하고 갔다.

결론은 꽤 재밌었다는 것.
배경 지식 하나 없이 그냥 평만 보고 간거라서
첨부터 끝까지 배우가 달랑 2명만 나오는 것에 조금 놀랐고,
그래도 단 둘이서 관객을 2시간 동안 몰입시키는 것에 신기해했을 정도로 재밌게 보았다.
난 최화정/윤주상 씨가 출연하는 편으로 보았는데, 역시 최화정이라는 생각이 들 정도로 꽤나 잘 어울렸다.
(사실 첨엔 목소리가 약간 적응 안됬지만서도...ㅎㅎ)
그리고 윤주상 씨도 멋진 연기~
연극이란 것이 관객 바로 앞에서 NG없이 쌩으로 첨부터 끝까지 해야 한다는 점이 배우들에게 엄청나게 부담이 되지 않을까라고 생각하는데 어찌 그리들 잘하시던지~

굳이 흠을 잡는다면 끝이 좀 약하다는 느낌이랄까나...

아무튼 열연해주신 배우분들께 박수를 보내며,
혹시 보러갈까말까 망설이는 분들이 계시다면 부담없이 가서 보시라 권하고 싶다.
2시간 후딱 간다~

멋지신 화정 누님~

CLASSPATH

프로그래밍/Java 2009. 1. 6. 17:44 Posted by galad
http://www.ibm.com/developerworks/kr/library/j-classpath-windows/index.html

E:\workspace\java_run_test>javac -verbose -d bin -sourcepath src src\test\xml\XMLMain.java

jdk설치 디렉\jre\lib\ext에 넣어둔 라이브러리도 참조해버렸다...
dom4j관련 에러가 나야 정상일 듯 싶은데...

역시나 jdk설치 디렉\jre\lib\ext에 넣었던 dom4j 관련 라이브러리 삭제 후 실행했더니 에러 발생.
그래서 다음과 같이 해봤더니,

E:\workspace\java_run_test>javac -verbose -d bin -sourcepath src -classpath E:\workspace\java_run_test\Lib src\test\xml\XMLMain.java

E:\workspace\java_run_test\Lib 여기에 dom4j관련 라이브러리가 있는데도 에러가 난다.
왜 그런가 봤더니
"완전하고, 개별적으로 컴파일 된 서드 파티 라이브러리를 사용하지 않는 경우를 가정했다. 만약 그렇다면, 이들을 classpath에도 추가해야 한다. 라이브러리는 junit.jar 또는 icu4j.jar 같은 JAR 파일로 배포된다. 이 경우, classpath에 추가하는 것은, JAR 파일 그 자체이다. 이것을 포함하고 있는 디렉토리가 아니다." - from IBM(위의 링크 참조)
랜다.

서드 파티 라이브러리 사용시엔 jar파일 자체를 추가해야 된단 말인가라고 생각하여

E:\workspace\java_run_test>javac -verbose -d bin -sourcepath src -classpath E:\workspace\java_run_test\Lib\dom4j-1.6.1.jar src\test\xml\XMLMain.java

로 했더니 깔끔하게 컴파일되었다.
음. 나름 이 업계서 먹고 살아왔는데도 기본을 잘 모르는군... 반성 반성...

이제 남은 건 실행.
bin폴더에 컴파일했으므로 bin폴더로 이동해서 다음과 같이 실행

E:\workspace\java_run_test\bin>java test.xml.XMLMain

당연히 될리 없다. dom4j관련 라이브러리 참조를 위해 classpath 지정

E:\workspace\java_run_test\bin>java -classpath E:\workspace\java_run_test\Lib\dom4j-1.6.1.jar test.xml.XMLMain

왠걸. 에러다.
Exception in thread "main" java.lang.NoClassDefFoundError: test/xml/XMLMain
Caused by: java.lang.ClassNotFoundException: test.xml.XMLMain
        at java.net.URLClassLoader$1.run(Unknown Source)

현재 지정된 클래스패스에서 test.xml.XMLMain를 못찾고 있다. 컴파일 타겟인 bin폴더를 지정안했으니 당연한 것인가라고 생각해서 다시 시도

E:\workspace\java_run_test\bin>java -classpath bin;E:\workspace\java_run_test\Lib\dom4j-1.6.1.jar test.xml.XMLMain

역시 에러. bin폴더에서 bin을 지정하고 있으니 문젠가 싶어서 상위 폴더로 이동 후 재실행

E:\workspace\java_run_test>java -classpath bin;E:\workspace\java_run_test\Lib\dom4j-1.6.1.jar test.xml.XMLMain

옷. 된다. (사실 또다른 라이브러리가 필요해서 에러가 발생했으나 문제는 파악되었으니 무시무시)

이게 완성된 실행문

E:\workspace\java_run_test>java -classpath bin;E:\workspace\java_run_test\Lib\dom4j-1.6.1.jar;E:\workspace\java_run_test\Lib\jaxen-1.1-beta-6.jar test.xml.XMLMain
java.net.ConnectException: Connection refused: connect --> 에러났으나 실행은 되었으니까 무시.

결론

javac -verbose -d bin(타겟 디렉토리) -sourcepath src(소스 디렉토리) -classpath E:\workspace\java_run_test\Lib\dom4j-1.6.1.jar(컴파일에 필요한 서드 파티 라이브러리의 경우 디렉토리path가 아닌 fie path) src\test\xml\XMLMain.java(실제 컴파일할 자바 소스-main()이 있는 클래스만 해도 연관된 것은 자동으로)


java -classpath bin;E:\workspace\java_run_test\Lib\dom4j-1.6.1.jar;E:\workspace\java_run_test\Lib\jaxen-1.1-beta-6.jar(실행 시 필요한 서드 파티 라이브러리&컴파일된 class파일이 있는 디렉토리) test.xml.XMLMain(실행시킬 풀 클래스명)
연결 시 '로컬 리소스' 탭을 누른다. 원격지 PC에서 내 PC로 데이터를 복사하려면 '로컬 서비스' 항목에서 '디스크 드라이브'에 반드시 체크 표시를 해야 한다.

'프로그래밍 > Library' 카테고리의 다른 글

[EXCEL] 셀 범위로 드롭다운 목록 만들기  (0) 2009.01.29
[log4j] 사용례  (0) 2009.01.08
[펌] JExcelApi & POI  (0) 2007.11.28
[펌] 자바로 엑셀 때려잡기!!  (0) 2007.11.28
[펌] 각종 제어  (0) 2007.11.28

One Hundred Pushups

사는 얘기 2009. 1. 6. 14:59 Posted by galad
푸쉬업 100개 라는 이름의 운동방법?

http://krang.tistory.com/177
위의 블로그에서 보고 해보자고 생각.

아래는 실제 이 운동을 주도하는 외국 사이트.
http://www.hundredpushups.com/what.html
http://hundredpushups.com/hpu_pocket.pdf

최근엔 싯업 200개라는 것도 진행하고 있는 중..

중간중간 쉬는 시간 측정을 위한 스탑워치 사이트
http://www.online-stopwatch.com/full-screen-stopwatch/

2009/01/06 도전 시작~!!

Initial Test
Week 1
Week 2
Week 3
Week 4
Week 5
Week 6
Final Test
위 순서로 진행되며, 중간에 테스트가 2번 더 있어서 중간점검을 하도록 해놓았다.

나의 경우는 Initial Test에서 연속30개 하고 스톱. 버티면서 했으면 조금 더 했을듯도 싶지만 어차피 거기서 거기.
그리고 이 운동은 자세를 매우 중요하게 여기고 있어서, 제대로 된 폼으로 하는 게 중요!



Age < 40 years 40 - 55 years > 55 years
Rank *
number of pushups performed
1 0 - 5 0 - 5 0 - 5
2 6 - 14 6 - 12 6 - 10
3 15 - 29 13 - 24 11 - 19
4 30 - 49 25 - 44 20 - 34
5 50 - 99 45 - 74 35 - 64
6 100 - 150 75 - 124 65 - 99
7 150 & above 125 & above 100 & above

Initial Test에서 30개였으므로 랭크 4~

Week 1 - Day 1
rest 60 seconds between each SET (longer if required)
  up to 5 push ups 6 - 10 push ups 11 - 20 push ups
set 1 2 6 10
set 2 3 6 12
set 3 2 4 7
set 4 2 4 7
set 5 max (at least 3) max (at least 5) max (at least 9)
Day 2
rest 90 seconds between each SET (longer if required)
set 1 3 6 10
set 2 4 8 12
set 3 2 6 8
set 4 3 6 8
set 5 max (at least 4) max (at least 7) max (at least 12)
Day 3
rest 120 seconds between each SET (longer if required)
set 1 4 8 11
set 2 5 10 15
set 3 4 7 9
set 4 4 7 9
set 5 max (at least 5) max (at least 10) max (at least 13)

따라서 Week 1은 빨간 글씨로 표시한 코스를 따라하게 되었다.
위의 리스트는 Week 1의 Day1/2/3으로 각각의 Day는 월수금/화목토 처럼 하루 걸러 하는 걸 추천해주고 있다.

2009/01/07 Week 1 - Day 1
을 하려고 봤더니, Initial Test에서 20개 이상 한 사람에게는 Week 3부터 하길 추천하고 있다.
그래서 가능하면 Week 3부터 시작하는 걸로 급변경!

Week 3 - Day 1
rest 60 seconds between each SET (longer if required)
  16 -20 push ups 21 - 25 push ups > 25 push ups
set 1 10 12 14
set 2 12 17 18
set 3 7 13 14
set 4 7 13 14
set 5 max (at least 9) max (at least 17) max (at least 20)
Day 2
rest 90 seconds between each SET (longer if required)
set 1 10 14 20
set 2 12 19 25
set 3 8 14 15
set 4 8 14 15
set 5 max (at least 12) max (at least 19) max (at least 25)
Day 3
rest 120 seconds between each SET (longer if required)
set 1 11 16 22
set 2 13 21 30
set 3 9 15 20
set 4 9 15 20
set 5 max (at least 13) max (at least 21) max (at least 28)

Week 1 - Day 1
14 - 18 - 14 - 14 - 최하 20개이상 최대한 할 수 있는 데까지.
각 세트 사이 60초간 휴식.
실제 나의 횟수는... 14 - 18 - 14(우왓 생각보다 힘들다..) - 14(폼이 슬슬 망가지기 시작..) - 20(헥헥)
마지막 것 솔직히 20개 훌쩍 넘게 할 줄 알았는데 안되더라 ㅡ.ㅡ;;
일단 하루 쉬고 다시!!

2009/01/09 Week1 - Day 2
20 - 25 - 15 - 15 - at least 25
각 세트 사이 90초 휴식.
음 힘들어 보인다.... 컨디션도 별로고만..
실제 횟수는...
20 - 25 - 15(힘들어진다...) - 15 - 25(힘드넹....)
전날 좀 제대로 쉬어야겠다...

2009/01/14 Week1 - Day 3
컨디션 조절이란 명목하에 넘 쉬었군. ㅡ.ㅡ;;
22 - 30 - 20 - 20 - 최소 28
각 세트 사이 120초 휴식
실제 횟수는...
22 - 30 - 20 - 20 - 28 갯수는 맞추는데 쉬는 시간이 길어졌다...
열심히~

week 4: pick the same column as you did in week 3
Day 1
rest 60 seconds between each SET (longer if required)
  16 -20 push ups 21 - 25 push ups > 25 push ups
set 1 12 18 21
set 2 14 22 25
set 3 11 16 21
set 4 10 16 21
set 5 max (at least 16) max (at least 25) max (at least 32)
Day 2
rest 90 seconds between each SET (longer if required)
set 1 14 20 25
set 2 16 25 29
set 3 12 20 25
set 4 12 20 25
set 5 max (at least 18) max (at least 28) max (at least 36)
Day 3
rest 120 seconds between each SET (longer if required)
set 1 16 23 29
set 2 18 28 33
set 3 13 23 29
set 4 13 23 29
set 5 max (at least 20) max (at least 33) max (at least 40)

Week 2 - Day 1 = 2009/01/16
목표: 21 - 25 - 21 - 21 - 최소 32 휴식 60초
실제: 21 - 25 - 21 - 21(헥헥) - 32
날이 갈수록 잘해야 될 것 같은데, 왠지 힘든 부분은 그대로다 ㅡ.ㅡ;;;
이래서 100개 한 번에 할 수 있으려나...

Week 2 - Day 2 = 2009/01/21
목표: 25 - 29 - 25 - 25 - 최소 36 휴식 90초
실제: 25 - 29 - 25 - 25 - 36
휴... 규칙적으로 해야겠다...


--> 넘 대충해서 다시 시작하기로 ㅡ.ㅡ;;;

'사는 얘기' 카테고리의 다른 글

마인드맵이라...  (0) 2009.01.09
세상에 공짜란 없다?!  (0) 2009.01.07
나도 어른인걸까  (0) 2007.12.04
[펌] 삶에서 가장 좋은 것들  (0) 2007.11.29
[펌] ☆사랑을 위한 13가지 마음가짐☆  (0) 2007.11.27

HttpURLConnection 사용례

프로그래밍/Java 2009. 1. 6. 13:29 Posted by galad
일반 자바 어플서 특정 URL로 request를 날리는 방법
###########################################################################################
package test.xml;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;

public class XMLSend {
    private String targetUrl = null;
   
    public XMLSend(String targetUrl) {
        this.targetUrl = targetUrl;
    }

    public void send(ArrayList<String[]> dataList) throws IOException {
        URL url = new URL(this.targetUrl);
        HttpURLConnection uc = (HttpURLConnection) url.openConnection();
       
        uc.setDoOutput(true);
        uc.setDoInput(true);
        uc.setUseCaches(false);
        uc.setRequestMethod("POST");
       
        StringBuffer sb = new StringBuffer();
       
        for(int i = 0; i < dataList.size(); i++) {
            String[] s = dataList.get(i);
           
//            uc.setRequestProperty(s[1], s[2]);
               // 0 = 찾을 노드의 xpath, 1 = SAP에 보낼 파라미터명, 2 = 찾은 데이타 // 왜 안되는가?
           
            sb.append("&").append(s[1]).append("=").append(s[2]);
            // 0 = 찾을 노드의 xpath, 1 = SAP에 보낼 파라미터명, 2 = 찾은 데이타
        }
       
//        uc.connect(); // 이 방식은 왜 안되는가??
       
       
        PrintWriter pw = new PrintWriter(uc.getOutputStream());
       
        pw.write("url="+url);
        pw.write(sb.toString());
       
        pw.flush();
        pw.close();
       
        BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream()));
        String str = null;
        while((str = br.readLine()) != null) {
            System.out.println(str);
        }
    }
}
###########################################################################################

위에서 날린 request를 서블릿서 처리하는 예시
###########################################################################################
package test.xml;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DIServer extends HttpServlet {

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        String a = request.getParameter("//DATETIME[@type='T' and @qualifier='DOCUMENT']/YEAR");
           // 이건 특수문자에 띄어쓰기까지 있어서 데이터를 념겨받을 수 없다
//        String a = request.getParameter("sap_element_01");
//        String a = request.getParameter("sap_element_02");
//        String a = request.getParameter("sap_element_03");
       
//        System.out.println(a);
       
        PrintWriter w = response.getWriter();
        w.println(request.getParameter("sap_element_01") + " " + request.getParameter("sap_element_02") + " " + request.getParameter("sap_element_03"));
        w.flush();
        w.close();
       
//        System.out.println(a);
    }
}
###########################################################################################

'프로그래밍 > Java' 카테고리의 다른 글

[HttpURLConnection] HttpURLConnection 에서 GET / POST 방식 사용상의 주의  (0) 2009.02.19
CLASSPATH  (0) 2009.01.06
[펌] HttpURLConnection 을 이용하세요  (0) 2009.01.02
04 UDP  (0) 2007.11.27
03 졸려....  (0) 2007.11.27
// 해당 URL을
URL url    = new URL( "http", host, port, dir + "?member_id=" + memberID );
// 연결하고
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
// 응답이
int responseCode = connection.getResponseCode();
                
String line    = "";
// 성공이면
if ( responseCode == HttpURLConnection.HTTP_OK )
{
BufferedReader  br      = new BufferedReader( new InputStreamReader( connection.getInputStream() ) );
    // 해당 URL의 끝을 볼때까지 라인을 읽어서                
    while ( ( line = br.readLine() ) != null)
    {
        result    += line;
    }                    
}

result 값을 파싱하시면 될겁니다.

출처: http://www.javanuri.com/devforum/boardView.jsp?menuId=137425&Id=303830&gb=qna

'프로그래밍 > Java' 카테고리의 다른 글

CLASSPATH  (0) 2009.01.06
HttpURLConnection 사용례  (0) 2009.01.06
04 UDP  (0) 2007.11.27
03 졸려....  (0) 2007.11.27
02 2일째....  (0) 2007.11.27

홍대 나고미 라멘 和らーめん

요리/음식점 2009. 1. 2. 16:52 Posted by galad
나름 괜찮았다. 그래도 일본서 먹었던 것에 비하면 5% 부족하다 느꼈지만...
뭐랄까 내 입맛에는 좀 담백했던 것 같다.
동경서 먹었던 라멘은 확실히 느끼~했던 것 같은데...

뭐 그래도 종업원이 시끄러운 것 빼고는 상당히 괜찮다.
나중에 또 가봐야지...

[펌] OLAP & DataWarehouse

프로그래밍/읽을거리 2008. 11. 26. 09:56 Posted by galad
DataWarehouse는 기업내의 의사결정을 지원해 주는 애플리케이션으로
정보제공을 위한 통합된 데이터 저장공간, 또는 의사결정지원과정에서 효과적으로 사용될 수 있도록 추출/변환/통합되고 요약된
읽기 전용데이터베이스를 가르킵니다.
데이타는 각 부서의 거래처리(TP: Transaction Processing)
시스템들에서 전달되어 통합되는데, 데이터는 날짜나 부서, 거래가 아니라 고객을 위주로 배열되며 보고서 작성기, 질의 도구, 데이타 검색 도구,
OLAP 서버, 기업정보시스템(EIS: Enterprise Information Systems) 등을 통해 유용한 정보를
만들어 냅니다. 즉 기업의 의사 결정 과정을 향상시켜주는 정보기술입니다.
DataWarehouse는 다양한 형태의 data를 포함하게 되는데, 이를 통해 특정 시점의 기업환경에 대하여 일관적으로 관찰할 수
있게 됩니다. 또한 업무 운영보다는 정보제공의 성격을 띠고 있습니다. 기업의 현업 실무자들이 주로 사용하는 OLTP 시스템과는 달리, 의사 결정권자들이
주로 사용합니다. 다시 말하면 OLTP 시스템이 업무 절차를 자동화시킨다면, DataWarehouse는 의사결정을
지원하는 것을 말합니다.
 
또한 별도의 하드웨어 플랫폼의 저장소를 말합니다. 데이터베이스의 개념과 비슷하지만 차이점은 이미 저장되어있는 데이터를 재가공, 추출하여
별도로 저장하는 곳이라 할 수가 있습니다. 즉 기업의 다른 시스템(보통 운영계 시스템이라 합니다.)으로부터 추출된 정보의 저장소를 가르킵니다.
 

이 지식은 삼성경제연구소에서 공유해주셨습니다.



출처 Think Alexandros the Great. Macedonia | 엔터프라
원본 http://blog.naver.com/edufuture/60021707433

OLAP : On-line Analysis Processing (온라인 분석 프로세싱)
 
분석과 관리 목적을 위해서 다차원데이터를 모으고, 관리하고, 프로세싱하고 표현하기위한, 응용프로그램 및 기술들의 종류


정리 요약되어있는 데이터를 유연한 방법으로 추출하는 방법론을 OLAP라고 한다.


대규모 데이터에 대한 실시간 분석처리. 정보시스템 사용자가 다차원 정보에 직접 접근하여 저장된 데이터를 추출, 가공하여 사용자의 질의어를 대화식으로 처리하고 추출된 정보를 분석하며 이를 의사결정에 활용하는 작업

 

 

===========================================================================================================

 

 DataWareHouse


지금은 Siebel의 사장님으로 계신 장동인씨가 한국 오라클 기술 본부 이사님으로 있을 때 지으신 책 중에 실무자를 위한 데이터 웨어하우스라는 책을 보면 이런 말이 있습니다.

내용을 그대로 옮겨보면....

데이터 웨어하우스란,
- 수년간의 (historical data)
- 기업의 운영계 시스템에서 생긴 내부 데이터와 (internal data)
- 외부 데이터를 (external data)
- 주제별로 통합하여 (subject-oriented)
- 별도의 프로그래밍 없이 (end-user computing)
- 즉시 (on - line)
- 여러 각도에서 분석을 가능케 하는 (mylti-dimensional analsys)
- 통합 시스템 (integrated system)이다.

.... 라고 설명하고 있습니다.

따라서 DW란 것은 고객에 편중된 것이 아닌 매출, 고객, 생산, 수주 등 기존의 운영계 시스템에서 발생하는 기업 내부의 데이터 및 경쟁사 정보, 인구 정보, 해외 정보 등 기업 외부의 데이터 까지 모두 통합되어 있는 시스템이라는 겁니다.

이런 개념은 오래전 부터 있어왔으나 실제 성능 및 가격에서 도저히 구축할 수 없는 가상의 시스템이었다가, 하드웨어의 성능 향상과 가격의 하락, 대용량 및 병렬 컴퓨팅을 지원하는 데이터 베이스의 개발로 DW는 본격적으로 막을 올리게 되었는데요..... 이는 이전에 존재하던 작은 규모의 데이터베이스 시스템들끼리 서로 통합을 할 수 있는 배경을 만들어준 셈이죠.

그러나 통합을 하기에 앞서 서로 다른 여러 데이터베이스 속에는 분명히 중복되는 데이터가 존재하기 마련이고, 불필요하거나 잘못 들어가있는 데이터들도 많다는 것입니다.
따라서 데이터 클렌징이라는 과정을 통해 데이터를 정제하는 작업을 필요로하게 됩니다.

데이터 웨어하우스를 구축하게 될때는 회사의 전략에 따라 얼마만큼의 범위를 어느 기간내에 만들어야 하며, 데이터 웨어하우즈의 위치는 어디에 둘 것이며(로드, 추출의 문제가 중요 안건이겠죠), 어떠한 모델로 얼마나 많은 사람들이 접근 할 것인가를 결정 해야 하며 이를 통해 데이터 웨어하우징의 범위를 결정하게 됩니다.

이때, 너무 성급한 목표, 전략 그리고 무엇을 어떻게 볼 것인가에 대한 자료의 정의가 필수적인데 이에 대한 해답을 외부에서 찾으려고 하거나 자신의 기준으로만 판단하는 경향이 강하기 때문에 DW 작업이 원활하게 이루어지지 않는 경우가 많습니다.

이를테면 구축 업체에게 모든 문제의 해결책의 제시를 요구하거나, 재촉을 한다던가, 계속되는 요구의 변화 및 확대, 요구사항 불이행, 확고하지 않은 의지 등은 큰 장애가 됩니다.

말이 너무 이상한 방향으로 흘렀는데요, 저는 데이터웨어하우스란 시간적 개념이 포함된 사용하기 쉬운 통합된 데이터베이스라고 정의하고 싶네요.
그리고 이 과정에 데이터 정제 작업이 들어간다고 말씀 드리고 싶습니다.


[펌] MySQL 사용하기

프로그래밍/DB 2008. 11. 25. 17:46 Posted by galad

MySQL에서 root 암호 설정

mysqladmin을 이용하여 root 암호 설정

MySQL을 처음 설치하면 root 암호가 설정되어 있지 않기 때문에 반드시 설치 후 바로 root 암호를 먼저 설정해주세요.%%% root 암호를 설정하기 위해서는

 $ mysqladmin -u root -p password new-password

이러한 명령을 실행하면 됩니다. 실행하면 패스워드를 입력하라고 하는데 처음 root의 패스워드는 없으므로 그냥 엔터를 치시면 root 패스워드가 변경됩니다.

update문을 이용하여 root 암호 설정

 $ mysql -u root mysql

 mysql> update user set password = password('new-password') where user = 'root';
 mysql> flush privileges;

set password를 이용하여 root 암호 설정

 mysql> set password for root = password('new-password');

마지막으로 패스워드가 재대로 변경되었는지 테스트를 합니다.

 $ mysql -u root -p

MySQL에서 Database 보기와 생성

데이터베이스 보기

 myslq> show databases;

데이터베이스 생성

 mysql> create database DB명;

MySQL에서 새로운 사용자 추가

MySQL에서 사용할 Database를 만든 후에 사용자를 추가하려면, 일단 root로 접속한 후

 $ mysql (?h localhost) ?u root ?p
 Enter password: *******

 mysql> use mysql
 mysql> INSERT INTO user VALUES('%', '사용자', PASSWORD('비밀번호'),
     -> 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');

이렇게 해서 사용자를 하나 만들었습니다. 맨 처음 ‘%’ 가 붙은 것은 다른 어느 호스트에서도 접속이 가능하게 하기 위해서 입니다. 간단하게 추가 하는 방법이 있습니다.


'GRANT' 명령을 이용하면 쉽게 사용자 추가 및 권한 설정이 가능합니다. (MySQL Manual 4.3.5)

  • 일반 사용자 추가
 mysql> grant all privileges on dbuser.* to dbuser@localhost identified by 'password' 
with grant option;

  • 특정 이름의 데이터베이스에 대한 모든 권한을 가지는 사용자 추가
 mysql> grant all privileges on `dbuser_%`.* to dbuser@localhost identified by 'password' 
with grant option;

'dbuser_'으로 시작되는 데이터베이스에 대한 모든 권한을 가지는 'dbuser' 사용자 계정 추가%%% 이런식으로 계정을 만들면 새로운 사용자에 대한 개별적인 데이터베이스 권한 설정을 생략할 수 있습니다. -- 이현진


사용자에게 Database 사용 권한을 주기

 mysql> INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv, 
Create_priv, Drop_priv)
     -> VALUES('%', 'DB명', '사용자', 'Y', 'Y', 'Y', 'Y','Y','Y');

모든 권한을 준다면 아래와 같은 방법을 하는것이 더욱 편리힙니다.

 mysql> GRANT ALL on DB명.* TO id@'localhost'  ;
 mysql> GRANT ALL on DB명.* TO id;
 mysql> GRANT ALL on DB명.* TO id@'xxx.xxx.xxx.%';

첫번째 localhost?로컬 호스트 (DB가 자기컴퓨터에 깔려 있는경우..에만 접속을 허용하겠다는 뜻입니다.

두번째 문장은 로컬 호스트를 제외하고는 모든 ip에서 접근을 시키겠다는 내용입니다.

세번째는 c클래스만 허용하겠다는 의미 입니다. xxx.xxx.%.% 면 B클래스 xxx.%.%.%면 A클래스로 제한을 할수 있습니다.

그리고 변경된 내용을 메모리에 반영하기 위해 다음 명령을 실행합니다.

 mysql> FLUSH PRIVILEGES;

이렇게 MySQL을 설정해 놓으면 사용자가 다른 호스트에서도 접속할 수 있고 테이블 추가 삭제 등도 할 수 있습니다.


이렇게 수동으로도 가능 하지만 요즘은 툴을 많이 사용합니다. 툴은 DB에 대한 기본적인 지식만 있으면 무리가 없이 사용 되는 녀석이죠 ^^%%% 저같이 쿼리에 약한 사람들에게는 정말 유리 합니다. 아래 페이지에 가셔서 다운로드를 받으세요 :) 한글 사용에 약간의 제약이 있습니다.%%% 다른 여러가지 DB관리 툴이 있지만 상당히 고가의 툴이랍니다 :) 암흑의 루트에서 돌고 있는 녀석들이 종종 있습니다.

http://www.mysql.com/downloads/mysqlcc.html


출처: http://www.gpgstudy.com/gpgiki/MySQL%EC%97%90%EC%84%9C%20%EC%82%AC%EC%9A%A9%EC%9E%90%EC%99%80%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%20%EB%A7%8C%EB%93%A4%EA%B8%B0

'프로그래밍 > DB' 카테고리의 다른 글

ORLCLE->MSSQL  (0) 2009.01.14
[펌/DB관련팁] 일간/월간/연간 통계 시  (0) 2009.01.09
[펌] mysql root 암호 분실 시  (1) 2008.11.25
[펌]PLSQL 초보  (0) 2008.01.10
PL SQL문제  (0) 2008.01.10

[펌] mysql root 암호 분실 시

프로그래밍/DB 2008. 11. 25. 17:19 Posted by galad


1>암호 초기화
# killall mysqld (데몬을 죽입니다)

# cd /usr/local/mysql (mysql이 깔린 곳으로 갑니다)

# ./bin/safe_mysqld --skip-grant &

여기까지가 초기화


2>새 암호 넣기
# ./bin/mysql (sql 실행)

mysql>use mysql

mysql>update user set password=password('새암호') where user='root';
(root 암호 변경합니다. '새암호' 자리에 새암호를 넣으세요
예>update user set password=password('1234') where user='root';

mysql> FLUSH PRIVILEGES
mysql> exit

# ./bin/mysql -uroot -p1234 으로 들어와지면 성공입니다

출처: http://kurapa.com

'프로그래밍 > DB' 카테고리의 다른 글

[펌/DB관련팁] 일간/월간/연간 통계 시  (0) 2009.01.09
[펌] MySQL 사용하기  (0) 2008.11.25
[펌]PLSQL 초보  (0) 2008.01.10
PL SQL문제  (0) 2008.01.10
DBMS_LOCK 사용 시 에러  (0) 2008.01.10

絢香 ayaka - おかえり

감상문 2008. 6. 26. 17:11 Posted by galad

최근 방영중인 일본드라마 절대그이-絶対彼氏의 엔딩곡.
맘에 든다.
드라마도 그냥 저냥 볼만하고.
冷静と情熱のあいだ Rosso - 江国 香織

한국에 있을떄부터 제목은 알고있었고 보려고도 했었지만,
왠지 보지 못했다. 않았다. 일지도...
그땐 그다지 책을 보지 않던 때였던 것 같다.

그러다 겨우 읽게된 - 무려 원서로! 모르는 부분은 그냥 적당히
알고 넘어갔지만 - 이 책에 대한 첫번째 감상은
"마브(Marv)가 불쌍해" 일려나? ㅎㅎ
아직 Blue가 남아있지만 Rosso는 별로 좋은 기분이 아니었다.
Blue도 그런 느낌이면 어쩐담...
사실 Rosso를 읽기 시작했을 때는 꽤나 재밌어서 가능하면
천천히 읽었다. Rosso가 주는 그 느낌을 오랫동안 느끼고 싶어서였다.
하지만 마지막 부분에 와서는 가능하면 빨리 넘기게되었다.

아오이는 왜 마브랑 사귀었을까?
나에게 있어서 아오이-쥰세이의 이야기보다도 마브가 기억에 남는다.
결국 아오이에게 마브는 아무런 의미도 되지 않는 사람이었나라는
느낌이 들어서 견딜수 없는 장면도 있었다.
자신의 안에 결코 지울 수없는-지워지지 않는 사람이 있다는 걸
알면서도 다른 사람의 곁에 있는 건...

그러고 보면 마브는 정말 대단한 듯.
4년이나 아오이의 거의 모든 걸 받아주었으니.
아오이는 항상 어딘가로 가 버릴 듯이,
자신의 모든 걸 내보이지 않고 있었는데도 말이지...

Blue는 어떤 내용인지는 모르겠지만,
아마 당분간은 읽고 싶다는 맘이 들지는 않을 듯 하다...
(사실 좀 안다 ㅡ.ㅡ;; 쥰세이가 아오이를 잡으러 간다는거? )


'감상문' 카테고리의 다른 글

[감상] 과속스캔들  (0) 2009.01.29
[감상] 작전명 발키리  (0) 2009.01.29
[감상] 대한민국 개발자 희망보고서 - 오병곤  (0) 2009.01.11
리타 길들이기  (0) 2009.01.06
絢香 ayaka - おかえり  (0) 2008.06.26

[펌]PLSQL 초보

프로그래밍/DB 2008. 1. 10. 15:57 Posted by galad

- PLSQL은 SQL에 프로그래맹 언어 설계 기능을 추가한 것이다.

- SQL의 데이터 조작문 및 질의문은 프로시저 단위코드에 포함된다.


< PL/SQL >

- Anonymou block : 평상시 script로 저장했다가 사용

- Function, Procedure

- Package : Function과 Procedure의 모음

- Trigger : 이벤트에 반응하는 로직


< PL/SQL의 블록구조 >

  -- DECLARE

          변수선언, 커서, 사용자가 정의한 예외사항

  -- BEGIN

          SQL문, PL/SQL문

  -- EXCEPTION

          오류가 발생할 때의 수행작업

  -- END;


※첨부파일 실행시 스키마를 고려하여 DB에 접속해야 한다.


< PL/SQL 공통 >


-- 생성한 함수/프로시져 조회
SQL> SELECT DISTINCT NAME FROM USER_SOURCE;
--생성 후에는 꼭 에러 여부를 확인한다.
SQL> SELECT * FROM USER_ERRORS; //마지막에 실행한 명령의 에러를 가지고 있다.


< PLSQL - EditPlus환경설정 >

※첨부파일

plsql2.zip

plsql2_구문강조_사용설명서.txt


======================================================================


< PLSQL - variable >

※첨부파일

plsql_variable01.sql

plsql_variable02.sql

plsql_variable03.sql


< PLSQL - cursor >

※첨부파일

plsql_cursor01.sql

plsql_cursor02.sql

plsql_cursor03.sql

plsql_cursor04.sql

plsql_cursor05.sql


< PLSQL - exception >

※첨부파일

plsql_exception01.sql

plsql_exception02.sql


< PLSQL - 종합문제 >

※첨부파일

plsql_exe01.sql : 종합문제 NO1 :사원별 급여현황에 따른 '*',급여 출력

plsql_exe02.sql : 종합문제 NO3 :급여 누적값 출력(1)

plsql_exe03.sql : 종합문제 NO3 :급여 누적값 출력(2)

plsql_exe04.sql : 종합문제 NO2 : 년도별 입사한 사원수 출력


 

======================================================================

** PROCEDURE : 어떠한 작업처리가 목적이다.

                         VALUE를 반환 할수도 안할 수도 있다.

                         SQL문에서 사용불가,

                         여러개의 인자를 받을수있다.


** FUNCTION : 반드시 한개의 VALUE를 반환한다.

                      SQL문에서 사용가능(사용자 정의 함수)


< PLSQL - PROCEDURE(프로시져) >

※첨부파일

procedure01_raise_salary.sql

procedure02_updownsalary.sql

procedure03_query_emp.sql

procedure03_query_emp_plsql.sql


< PLSQL - FUNCTION(함수) >

※첨부파일

function01_get_sal.sql : 사원번호를 받아 급여를 출력하는 함수

function02_annsal.sql : 연봉을 구하는 함수

function03_find_dname.sql : 특정 사번을 그 사원의 부서명을 출력하는 함수


< PLSQL - TRIGGER >

※첨부파일

trigger01_secure_emp.sql

trigger02_copy_insert.sql

trigger03_update_dept.sql

trigger04_delete_dept.sql

trigger05_delete_emp.sql

trigger06_set_null_emp.sql

trigger07_update_cascade_emp.sql

trigger08_audit_emp_values.sql

'프로그래밍 > DB' 카테고리의 다른 글

[펌] MySQL 사용하기  (0) 2008.11.25
[펌] mysql root 암호 분실 시  (1) 2008.11.25
PL SQL문제  (0) 2008.01.10
DBMS_LOCK 사용 시 에러  (0) 2008.01.10
[펌]SQL*plus FAQ 및 TIPS  (0) 2008.01.09

PL SQL문제

프로그래밍/DB 2008. 1. 10. 15:43 Posted by galad

금일 PL SQL문제중 이런게 나왔었다. 잘 기억은 안난다만... 인사관리를 짜라고 했는데...

등록되어 있는 사원들의 평균 급여를 내어 출력하고 평균 급여가 메니져보다 높은 사람의 급여를

15% 삭감하고, 삭감할 사람의 나이가 평균 나이보다 높을 사람의 경우에는 그대로 두어라...

물론 실제 문제랑은 많이 차이가 있음. 책에도 이런문제는 많이 있을 듯...


주요 조건은 프로시져로 짜야하며 패키지와를 시켜야 하고 폴더는 어디에 주석은 어떻게 달아야 하고

제한시간 1시간. 저건 문제중 한개이고... 총 문제수 5문제......-_-;;;;

'프로그래밍 > DB' 카테고리의 다른 글

[펌] mysql root 암호 분실 시  (1) 2008.11.25
[펌]PLSQL 초보  (0) 2008.01.10
DBMS_LOCK 사용 시 에러  (0) 2008.01.10
[펌]SQL*plus FAQ 및 TIPS  (0) 2008.01.09
[펌]DECODE 이용사례 (4) - BETWEEN OPERATOR  (0) 2008.01.09

DBMS_LOCK 사용 시 에러

프로그래밍/DB 2008. 1. 10. 10:20 Posted by galad
DBMS_LOCK.SLEEP()을 사용하려고 하는데, isql모드(sqlPlus)에서는 무리없이 수행되나, PL/SQL에서 사용하면 하기와 같은 에러가 발생합니다.
PLS-00201: identifier 'SYS.DBMS_LOCK' must be declared



system 계정에서 다음과 같이 권한을 주세요
> sqlplus /nolog

// sys유저에 sysdba권한으로 접속을 합니다
SQL*Plus: Release 9.2.0.5.0 - Production on Mon Feb 26 13:56:02 2007
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
SQL> conn sys/manager@oracle as sysdba

SQL> grant execute on dbms_lock to scott;

'프로그래밍 > DB' 카테고리의 다른 글

[펌]PLSQL 초보  (0) 2008.01.10
PL SQL문제  (0) 2008.01.10
[펌]SQL*plus FAQ 및 TIPS  (0) 2008.01.09
[펌]DECODE 이용사례 (4) - BETWEEN OPERATOR  (0) 2008.01.09
[펌]DECODE를 이용하여 원치 않는 자료를 없애는 방법  (0) 2008.01.09

[펌]SQL*plus FAQ 및 TIPS

프로그래밍/DB 2008. 1. 9. 17:45 Posted by galad
(V7.X ~ V8.X) : SQL*plus FAQ 및 TIPS
=============================================

Q) Row wrapping없이 flat ASCII file을 만드는 방법
Q) 두 개의 Date type column 사이의 평균 시간을 구하는 방법
Q) Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법
Q) SQL 내의 문자열 주변에 인용부호를 생성하거나 QUOTES를 생성하는 방법
Q) `LIKE` 연산자를 사용하여 case insensitive search를 할 수 있는 방법
Q) Column delimited flat file을 생성하는 방법
Q) Product_User_Profile에 관하여

1. Q) Row wrapping없이 flat ASCII file을 만드는 방법은 무엇입니까?

    A) `SPOOL` command와 `SET LINESIZE` 와 `SET BUFFER` command를 사용하시기 바랍니다.
sql query를 화일에 저장하기 위해서는 spool command를 사용하시면 됩니다.
화일 확장자를 기술하지 않으면, O/S에 따라서 다르지만, 대부분의 O/S에서는 .lst나 .lis를 사용합니다.
    SQL*plus에서 flat file을 생성하기 위해서는 먼저 다음과 같은 SET command를 기술하여야 합니다.
    SET NEWPAGE 0
    SET SPACE 0
    SET LINESIZE 80
    SET PAGESIZE 0
    SET ECHO OFF
    SET FEEDBACK OFF
    SET HEADING OFF

위의 command를 기술한 후에, spool command를 사용하시면 됩니다.


2. Q) 두 개의 Date type column 사이의 평균 시간을 구하는 방법은 무엇입니까?

    A) 다음과 같은 두 개의 row를 가지는 date field가 있다고 가정합니다.

    01-jan-96 01:10
    01-jan-96 01:20

sql> select avg(to_number(to_char(a, `MMDDYYHHMI`))) from x;

AVG(TO_NUMBER(TO_CHAR(A,`MMDDYYHHMI`)))
---------------------------------------
                               101960115

즉, 1:10과 1:20 사이의 평균 시간은 1:15입니다.


3. Q) Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법은 무엇입니까?

    A) 해결 방법은 세 가지가 있습니다.

1> SQL*plus에서 SET DEFINE OFF나 SET SCAN OFF를 실행하여 substitution
variable(&)을 turn off시키는 방법입니다.

(Example)
    sql> SET DEFINE OFF
    sql> INSERT INTO table_name VALUES(`AT&T`);
    /
    1 row created

2> SET DEFINE ON 상태로 유지시키면서 substitution variable을 다른
non-alphanumeric 문자나 non-white space 문자(*, % 등등)로 대체시킨다.
 
(Example)
    sql> SET DEFINE %
    sql> INSERT INTO table_name VALUES(`AT&T`);
    /
    1 row created

3> SET ESCAPE ON 상태에서(DEFINE은 &로, SCAN은 ON상태로 유지) 특수 문자 앞에
escape 문자인 backslash(``)를 선행하도록 합니다.

(Example)
    sql> SET ESCAPE ON
    sql> SHOW ESCAPE
         ESCAPE "" (hex 5c)
    sql> INSERT INTO table_name VALUES (`select * from emp where ename=&1`);
    1 row created.
    sql> select * from table_name;

    COL1
    ---------------------------------------------------------
    SELECT * FROM EMP WHERE ENAME=&1


4. Q) SQL 내의 문자열 주변에 인용부호를 생성하거나 QUOTES를 둘 수 있습니까?

    A) 해결 방법은 다음과 같습니다.

1> Single quotation mark를 생성하기 위해서는 4 single quote(````)를 사용하
시기 바랍니다.

(Example)
    sql> select ```` from dual;
위의 문장을 실행 시 return되는 결과는 다음과 같습니다.
`
-
`

2> 문자열 주변에 single quote를 두기 위해서는 3 single quote 안에(```) 문자
열을 포함시키면 됩니다.

(Example)
    sql> select ```character string in quotes``` result
         from dual;

위의 문장을 실행 시 return되는 결과는 다음과 같습니다.

RESULT
-----------------------------------------------
`CHARACTER STRING IN QUOTES`

3> 참고로, Literal single quote를 생성하기 위해 연속적인 single quote mark
를 사용하는 방법은 다음과 같습니다.

(Example)
    srw.do_sql(`select decode(dname, ``NONE``, NULL, ``A``)
                from dept
                where deptno = 10`);

위의 문장을 실행 시 return되는 결과는 다음과 같습니다.

    select decode(dname, `NONE`, NULL, `A`)
    from dept
    where deptno = 10

(Example)
    DECLARE
       a varchar2(200);
       q char(1) := ````;
    BEGIN
       a := ```this is a ` || q || `quoted`` string` || q;
    END;

위의 문장을 수행 결과 스트링 a에는 `this is a `quoted` string` 이 저장됩니다.


5. Q) `LIKE` 연산자를 사용하여 case insensitive search를 할 수 있는 방법은
무엇입니까?

    A) LIKE 연산자를 사용하여 비교하기 위해 필드에 `UPPER` 함수를 사용하시면
됩니다.


6. Q) Column delimited flat file을 생성하는 방법은 무엇입니까?

    A) 해결 방법은 두 가지가 있습니다.

1> query 내에서 column 분리자를 concatenate시키면 됩니다.

(Example)
To delineate column text with TABs:
------------------------------------
sql> select deptno || chr(9) || dname from dept;

DEPTNO || CHR(9) || DNAME
------------------------------------
10        ACCOUNTING
20        RESEARCH
30        SALES
40        OPERATIONS

CHR(9) 문자함수는 query 문 안에 TAB을 embedding하기 위해 사용됩니다.

(Example)
To deleneate column test with COMMAs:
-------------------------------------
sql> select deptno || `,` || dname from dept;

DEPTNO || `,` || DNAME
-------------------------------------
10,ACCOUNTING
20,RESEARCH
30,SALES
40,OPERATIONS

Query 결과를 화일로 보내기 전에 다음과 같이 SET COMMAND를 수행하시기 바랍니다.

SET TERMOUT OFF
SET NEWPAGE 0
SET SPACE 0
SET LINESIZE 80
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SPOOL file_name

원하는 Query문 수행 후에는 다음과 같이 다시 setting 하시기 바랍니다.

SPOOL OFF
SET TERMOUT ON

SQL*plus 버젼 3.0.x와 3.1.x에서는 컬럼 사이의 간격을 조정하기 위해 column
분리자를 명시해 주는 SET COMMAND가 지원되지 않습니다.

2> SQL*plus 3.2 이상의 버젼에서는 COLSEP command를 사용하시면 됩니다.

Query 결과를 comma delimited flat file에 보내기 전에 다음과 같이 SET COMMAND
를 수행하시기 바랍니다.

SET TERMOUT OFF
SET NEWPAGE 0
SET SPACE 0
SET LINESIZE 80
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET COLSEP `,`
SPOOL file_name

원하는 Query 문 수행 후에는 다음과 같이 다시 setting하시기 바랍니다.

SPOOL OFF
SET TERMOUT ON


7. Q) PUPBLD.SQL 스크립트를 찾지 못하여 public synonym을 drop할 수 없습니다.
해결 방법은 무엇이며, Product_User_Profile에 관하여 알고 싶습니다.

   A) Product_User_Profile은 product-level security를 제공하기 위해 DBA가
수정할 수 있는 테이블입니다.
    대부분의 오라클 product들은 SQL GRANT와 REVOKE command에 의해 제공되는
user-level security와 user role들을 추가한 product-level security를 제공하는
이 테이블을 사용합니다.  
    이 테이블을 생성하기 위해서는 SYSTEM으로 connect하여 PUPBLD.SQL이나
V7PUP.SQL을 돌려주어야 합니다.
   PUPBLD.SQL 스크립트를 실행하면 SYSTEM 계정 내에 product_profile과
user_profile 테이블을 생성해 줍니다. 여기에는 두 개의 view가 있는데,
product_privs와 user_privs가 그것입니다.
    사용자들은 product_profile과 user_profile이라는 이름으로 조회할 수 있습
니다.
이 view를 조회하면 해당 계정에 관한 privileges와 profile들을 알 수 있습니다.
    그런데, 현재 사용 중인 일부 product나 user profile structure는 제거하지
않기 때문에 manual하게 table, synonym, view들을 drop해 주어야 합니다.
    만약, delete해야 할 내재하는 structure가 있다면, 다음의 SQL문을 SQL*plus
에서 수행해 주시기 바랍니다.

    drop synonym product_user_profile;
    drop table product_profile;
    drop table product_user_profile;
    drop view product_privs;
    revoke select on product_privs from public;
    drop public synonym product_profile;
    drop synonym product_user_profile;
    drop public synonym product_user_profile;
    drop table user_profile;
    revoke select on user_profile from public;
    drop view user_privs;
    revoke select, update, insert, delete on user_privs from public;
    drop public synonym user_profile;