'Java'에 해당되는 글 37건

허니몬의 IT 이야기/프로그래머, '코드 엔지니어'
자바와 관련된 행사중 가잔 큰 행사인 'JavaOne(http://java.sun.com/javaone/)'이 6월 2일부터 5일까지 미국 샌프란시스코에서 개최가 된다고 합니다. 해당 홈페이지에는 연일 자바원과 관련된 다양한 콘텐츠들이 올라오고 있는데요, 이중 가장 큰 화제라는 'Vector Project' 가 아닐까 생각됩니다.

SUN의 CEO인 Jonathan Schwartz는 자신의 블로그에서 세계 최대의 앱스토어에 대해서, 오는 6월 JavaOne 에서 발표할 것임을 알렸습니다(해당 글 : http://blogs.sun.com/jonathan/entry/will_java_be_the_world ).
  JavaFX(
http://www.javafx.com/)라는 신기술을 기반(플랫폼)으로 하는 앱스토어를 출시할 것임을 알리고 있습니다. 자바는 전세계적으로 수십억개의 runtime volume(이건 뭐라고 해석을 하는게 좋을까요? ㅡㅅ-)? 실행체?)이 컴퓨터, 모바일 장치, 스마트 카드, 대형 서버, 셋톱박스 등 다양한 분야에서 실행되고 사용되어지고 있습니다. 그만큼 전세계적인 영향력을 가지고 있는 플랫폼이라고 할 수 있습니다.

  자바 앱스토어의 출시는, 애플의 앱스토어 만큼이나 큰 이슈 및 IT 사회의 다양한 변화를 불러일으킬 것입니다. 이를 통해 자신들의 입지를 더욱 견고히 하고, 확장을 할 수 있는 발판으로 삼으려고 하는 것 같습니다. 이 영향이, MS에 지배당하고 있는 우리나라 시장에서도 좋은 경쟁구도를 만들어낼 수 있지 않을까 생각됩니다.
  자바는 JVM에 의해서 운영체제에 대한 의존성이 거의 없는 플랫폼이기도 합니다. SUN에서는 OpenSolaris(
http://www.opensolaris.org/os/) 라고 하는 자바 기반의 OS를 가지고 있습니다. 거기에 OpenOffice(http://www.openoffice.org/)라고 하는 MS office의 기능을 대신할 수 있는 공개 프로그램을 제공하고 있으며, 가상머신을 만들어내는 VMware를 대신할 수 있는 VirtualBox(http://www.virtualbox.org/)를 가지고 있으며, 모회사인 Oracle의 DBMS인 Oracle(http://www.oracle.com/index.html)이 있고, 개발툴(IDE)인 NetBeans(http://www.netbeans.org/)도 가지고 있습니다.

  제 기억이 맞다면, 위의 OS를 비롯한 응용프로그램들을 공개버전으로 제공하면서 자신들의 영향력을 넓히려 하고 있습니다. SUN의 힘찬 발걸음들이 IT 시장에 과연 어떤 변화들을 불러일으킬지 기대가 됩니다. +_+)b




한게임에서 유저가 직접 게임을 만들고, 즐기고 판매하는 컨셉의 게임 오븐(http://idogame.hangame.com/)을 발표했습니다. 게임을 제작할 수 있는 SDK(Standard Development Kit)인 게임 오븐을 제공하고, 유저들이 이 게임 오븐을 이용해서 게임을 개발하여 게임 앱스토어에 올리는 것 같습니다. 애플의 앱스토어, MS의 모바일 스토어, SK에서 할 모바일 앱스토어 등의 컨셉과 비슷하다고 할 수 있겠죠? ^^

앱스토어의 기본은 유저에게 SDK를 제공하여, 창의성과 실력을 가지고 있는 유저들에 의해 생산되는 애플리케이션을 활용하겠다는 컨셉인거죠. 누군가 처럼... 유저들이 차려놓은 밥상에 숟가락만 얹으려는 속셈이라고도 할 수 있겠네요. 그래도 어쩌겠습니까. 그 만큼 유저들의 요구와 취향이 다양해지고 있는데. 개발사에서 그것들을 모두 충족시키지 못하는 것에 대한 욕구불만의 반증이 아닐까 싶기도 합니다. ^^;




개발사들은 각성하라!!! 각성하라!!
나도 곧 개발자가 될 것이기는 하지만... OTL... 암울하다.
허니몬의 IT 이야기
제 자바용 블로그(허니몬의 자바guru, http://java.ihoney.pe.kr)에 올린 내용이지만... 콘텐츠가 100개가 되지 않으면 사이트 등록이 되지 않는 통에 중복 포스팅을 하게 되네요. 죄송합니다.



지난 2009년 5월 18일, SUN의 CEO인 Jonathan Schwartz는 자신의 블로그에서

"Will the Java Platform Create The World's Largest App Store?"

라는 제목으로 영상 포스팅을 올렸습니다. 그는 거기서 아래처럼 말했습니다. 의역이 많이 들어갔습니다. ㅡ0-);; A4 2페이지 분량의 글이었지만, 핵심은 마지막 몇줄 안되더군요. A4 2페이지 읽는데 많은 시간이 걸리네요.ㅠㅅ-) 영어만 보면 졸려.
  오는 2009년 6월 2일, 샌프란시스코에서 JavaOne(http://java.sun.com/javaone/) 을 통해 SUN 사에서는 새로운 플랫폼이라고 할 수 있는 JavaFX(http://www.sun.com/software/javafx/index.xml, 공식 홈페이지 : http://www.javafx.com/)를 공식적으로 선보일 예정이다. 이 JavaFX를 기반으로 하는 Project Vector도 선보일 것으로 보입니다.


RIA 개발 플랫폼이라고도 할 수 있는 JavaFX가 공식 발표되면 사람들의 많은 관심과 함께 새로운 흐름을 만들어내지 않을까라는 당연한 생각을 하게 됩니다. ^^ 조만간 JavaFX를 통해 제작된 세계최대의 app Store의 탄생을 기다려 봅니다. 이클립스에서도 JavaFX 관련한 Plug-in을 내놓을까요??




● SUN CEO Jonathan's blog
http://blogs.sun.com/jonathan

● JavaFX 관련 홈페이지
http://www.sun.com/javafx
http://www.javafx.com

● 플랫폼(PlatForm) 이란 무엇인가?
http://www.ihoney.pe.kr/353

● 대표적인 App Sotre (APPLICATION Store)
애플 스토어 : http://store.apple.com/kr
MS 앱스토어 : http://www.microsoft.com/emea/windowsmobileapps/default.mspx
SK 앱스토어(9월 출시예정) : http://tvpot.daum.net/my/MyClipView.do?clipid=14651110&ownerid=.ywpQd7EUPU0

● JavaFX란 무엇인가? 많이 부족해서 부끄럽군요....ㅡ0-);;
http://java.ihoney.pe.kr/9
http://java.ihoney.pe.kr/26

허니몬의 IT 이야기/프로그래머, '코드 엔지니어'
저는 '허니몬의 달콤한 비행' http://ihoney.pe.kr 을 운영하고 있습니다.

최근 자바와 관련된 공부를 하면서, 이에 대한 내용들을 정리해서 올리려고 하고 있습니다. '허니몬의 달콤한 비행' 블로그 자체가 두서없는 다양한 주제에 대한 이야기를 쓰는 포스트이기는 하지만, 이에 대해서는 개선에 대한 필요성을 느끼고, 자바와 관련된 내용을 전담할 블로그를 개설합니다. ^^;

누군가의 GURU가 될 수 있기를 바라면서 끊임없이 모르는 것을 배우고 노력하는 자세를 갖추도록 노력하겠습니다. ^^; 갑자기 구루(GURU)라는 단어에 필이 꽂혀버렸습니다.

왜 그럴까요 ㅡㅅ-)?

허니몬의 자바guru, http://java.ihoney.pe.kr
자바에 대한 궁금증을 하나하나 풀어가보렵니다. ^^
허니몬의 IT 이야기/프로그래머, '코드 엔지니어'

● 과제 09/04/24


** 함수 :좀더 강력한 질의문을 작성하기 위해서

1)오라클제공 내장함수

 - 단일행함수
    - 문자형함수:lower,upper,initcap,substr,instr,
            lpad,rpad,ltrim,rtrim등
   - 숫자형함수 :round,trunc,mod등
   - 날짜형함수 :add_months,months_between,
             next_day,last_day,sysdate등
   - 형변환함수 : to_char,to_number,to_date등
   - 기타 함수 :nvl,decode,case등
- 그룹행함수 :sum,count,max,min,avg등

 

2)사용자 함수 : pl/sql로 작성

** 단일행함수의 사용예

1.select문장에서
select round(72.15,1),round(72.15,-1),round(72.15,0)
from dual;   ==>함수를 사용법,결과를 테스트하고자 할때

 

  1. select ename,sal,round(sal,-1)
    from emp;

 

  1. select ename,sal,round(sal,-2),hiredate ==>표현에 관계되는 절
    from emp
    where round(sal,-2)>=1000;   ==>행을 제한하는 조건절

 

2.그외문장에서

  1. update emp
    set sal=round(sal,-1)
    where ename='SCOTT';

 


문제1) EMP 테이블에서 scott의 사원번호,성명,담당업무(소문자로),부서번호를 출력하여라.
select empno,ename,lower(job),deptno
from emp
where lower(ename)='scott';

 

문제2) DEPT 테이블에서 모든 부서의 부서명,위치를 첫 글자들만 대문자로 변환하여 출력하여라.
select initcap(dname),initcap(loc)
from dept;

 

문제3) EMP 테이블에서 이름의 첫글자가 ‘K’ 보다 크고 ‘Y’보다 작은 사원의 사원번호, 이름, 업무, 급여, 부서번호를 출력하여라. 단 이름순으로 정렬하여라.
select ename,substr(ename,1,1),substr(ename,1),substr(ename,2,2)
from emp;

 

select empno,ename,job,sal,deptno
from emp
where substr(ename,1,1)>'K' and substr(ename,1,1)<'Y'
order by ename;

 

문제4) EMP 테이블에서 부서가 20번인 사원의 사원번호, 이름, 이름의 자릿수, 급여, 급여의 자릿수를 출력하여라.
select empno,ename,length(ename),sal,length(sal)
from emp
where deptno=20;

 

문제5) EMP 테이블에서 급여를 30으로 나눈 나머지를 구하여 출력하여라.
select ename,sal,mod(sal,30)
from emp;

 

** 오라클 날짜타입:date

- 반드시 값이 세기,년,월,일,시,분,초 7개의 값이 저장된다.

 

select * from nls_session_parameters;   ==>현재 세션에 설정된 환경설정값들을 확인

alter session set nls_date_format='rrrr/mm/dd:hh24:mi:ss';  ==>현재 세션의 날짜표현방법을 이런패턴으로 바꿔라~
select * from emp;
alter session set nls_date_format='dd/mm/rr';

 

select * from emp
where hiredate >'81/01/01';  ==>?(에러)

 

alter session set nls_date_format='rr/mm/dd';

 

select * from emp
where hiredate >'81/01/01';  ==>?

 

- 오라클 날짜값은 표현하는 범위가 BC xxxx~ AD 9999까지 표현된다.

 

- 날짜 기본연산이 가능

  날짜 +숫자(day)  ==>날짜
  날짜 - 숫자  ==>날짜
  날짜 - 날짜  ==>day
  날짜 + 숫자/24 ==>날짜
  날짜 - 숫자/24

 

select sysdate,sysdate-to_date('2009/03/16','rrrr/mm/dd'),sysdate+20/24
from dual;

 

문제6) EMP 테이블에서 현재까지의 근무일수가 몇 주 몇 일인가를 출력하여라. 단 근무 일수가 많은 사람순으로 출력하여라.
select ename,hiredate,trunc(sysdate-hiredate) "총근무일수",trunc(trunc(sysdate-hiredate)/7) "총근무주수",trunc(mod((sysdate-hiredate),7)) "나머지일수"
from emp
order by 3 desc;

 

문제7) EMP 테이블에서 10번 부서원의 현재까지의 근무 월수를 계산하여 출력하여라.
select ename,hiredate,trunc(months_between(sysdate,hiredate))
from emp
where deptno=10

 

문제8) EMP 테이블에서 10번 부서원의 입사 일자로부터 5개월이 지난 후 날짜를 계산하여 출력하여라.
select ename,hiredate,add_months(hiredate,5)
from emp
where deptno=10;

 

문제9) EMP 테이블에서 10번 부서원의 입사 일자로부터 돌아오는 금요일을 계산하여 출력하여라.
select ename,hiredate,next_day(hiredate,6)
from emp
where deptno=10;

 

문제10) EMP 테이블에서 입사한 달의 근무 일수를 계산하여 출력하여라. 단 토요일과 일요일도 근무 일수에 포함한다.
select ename,hiredate,last_day(hiredate),last_day(hiredate)-hiredate
from emp;

 

** 형변환 :데이터타입이 변환

- 자동형변환 :오라클이 자동으로 변환
- 수동형변환 :개발자가 함수를 사용해서 변환

 

** 자동형변환의 예

create table test(
id    number,
name    varchar2(10));
desc test
select * from test;
insert into test(id,name)
values(1,10);    ==>?(성공 : 숫자10을 자동으로 문자10으로 형변환시켜서 입력)
select * from test;
select ename+100 from emp;  ==>?(에러)
select id+10,name+100 from test;  ==>?(성공 : 문자 10을 자동으로 숫자10으로 변환시켜서 처리)

** 수동형변환

- to_char  함수 :날짜나 숫자를 문자로 변환하는 함수

날짜변환의 예

-현재의 세기,년,월,일,시,분,초정보및 요일정보를 확인

select sysdate,
to_char(sysdate,'rrrr/mm/dd:hh24:mi:ss:day')
from dual;

 

- rr과 yy의 차이점

rr : 년도가 0~49년도일 경우에는 현재세기로 인식하고, 50~99년도일 경우에는 이전세기로 인식
yy :무조건 현재세기

select * from nls_session_parameters;
==>현재 nls_date_format의 값이 rr/mm/dd로 설정되어 있음

select *
from emp
where hiredate >'81/01/01';   ==>결과1

alter session set nls_date_format='yy/mm/dd';

select *
from emp
where hiredate >'81/01/01';  ==>결과1과의 차이점

 

2)숫자변환의 예
emp테이블의 사원들의 급여를 돈의 단위처럼 표

 

- to_date함수 : 문자를 날짜로 변환시켜주는 함수

insert into emp(empno,ename,hiredate)
values(8000,'홍길동',to_date('10-12-2009:10','dd-mm-rrrr:hh24'));

select * from emp;

 

** DECODE/CASE함수

 

select ename,deptno,
decode(deptno,10,'10번부서',20,'20번부서',30,'30번부서','기타부서') "부서",
case when deptno=10 then '10번부서'
    when deptno=20 then '20번 부서'
    when  deptno=30 then '30번 부서'
    else  '기타부서'
end  "case문"
from emp;

SQL : RDB 조작하는 언어

1) SELECT : 조회

2) Create, Alter, Drop, Truncate ....

 : DDL(Data Definition Language) - 생성, 수정, 삭제

3) Insert, Update, delete

 : DML(Data Manipuation Language) - 데이터 입력, 수정, 삭제

4) Commit, Rollback, Savepoint

 : TCL (Transaction Control Language) - 트랜잭션 종료 및 취소

5) Grant, Revoke

 : DCL(Data Control Language) - 권한부여, 취소

 

Data dictionary table

 = System table

 = catalog table

ex) tab, nls_session_parameters, all_users, user_tab_columns

 

※ 왜(Why!!! Tell me Why! )!? 에 집중하라!!


실행순서 Select 문

3)

1)

2)

4)

Select => 검색 컬럼

From  = > 테이블명 지정

Where = > 행을 제한하는 조건절

Order by 컬럼명 / 숫자 / 별칭 + [ ASC / DESC ]

 

SELECT * FROM dual;   dual 테이블은 함수 test를 위해서 오라클에서 제공하는 1행 1열의 테이블이다.

 

단일행함수

  1. SELECT ROUND(72.15, 1), ROUND(72.15, -1), ROUND(72.15, 0) FROM dual;
SQL> SELECT ROUND(72.15, 1), ROUND(72.15, -1), ROUND(72.15, 0) FROM dual;

ROUND(72.15,1) ROUND(72.15,-1) ROUND(72.15,0)
-------------- --------------- --------------
         72.2              70             72

 

  1. SELECT ename, sal, round(sal, -1) from emp;
SQL> SELECT ename, sal, round(sal, -1) from emp;

ENAME             SAL ROUND(SAL,-1)
---------- ---------- -------------
SMITH             800           800
ALLEN            1600          1600
WARD             1250          1250
JONES            2975          2980
MARTIN           1250          1250
BLAKE            2850          2850
CLARK            2450          2450
SCOTT            3000          3000
KING             5000          5000
TURNER           1500          1500
ADAMS            1100          1100
JAMES             950           950
FORD             3000          3000
MILLER           1300          1300

 

  1. SELECT ename, sal, round(sal, -1), hiredate FROM emp WHERE ROUND(sal, -1) >= 2000;
SQL> SELECT ename, sal, round(sal, -1), hiredate FROM emp WHERE ROUND(sal, -1) >= 2000;

ENAME             SAL ROUND(SAL,-1) HIREDATE
---------- ---------- ------------- --------
JONES            2975          2980 81/04/02
BLAKE            2850          2850 81/05/01
CLARK            2450          2450 81/06/09
SCOTT            3000          3000 87/04/19
KING             5000          5000 81/11/17
FORD             3000          3000 81/12/03

 

문제 1) EMP 테이블에서 scott의 사원번호, 성명, 담당업무(소문자로), 부서번호를 출력하여라.

  1. SELECT empno, ename, LOWER(job) "JOB" FROM emp WHERE ename = 'SCOTT';         //LOWER() 소문자 만들어줘라.
  2. SELECT empno, ename, LOWER(job) "JOB" FROM emp WHERE LOWER(ename) = 'scott';  // 요로코롬 해주는 게 나을듯. 이름 대소문자 구분할 필요 없음.
SQL> SELECT empno, ename, LOWER(job) FROM emp WHERE ename = 'SCOTT';

    EMPNO ENAME      LOWER(JOB
---------- ---------- ---------
     7788 SCOTT      analyst

 

문제 2) DEPT 테이블에서 모든 부서의 부서명, 위치를 첫 글자만 대문자로 변환하여 출력하여라.

  1. SELECT dname, INITCAP(loc) FROM dept; // 두 개 항목 모두를 변경하는 것이군요.
  2. SELECT INITCAP(dname), INITCAP(loc) FROM dept;
SQL> SELECT INITCAP(dname), INITCAP(loc) FROM dept;

INITCAP(DNAME) INITCAP(LOC)
-------------- -------------
Accounting     New York
Research       Dallas
Sales          Chicago
Operations     Boston

 

문제 3) EMP 테이블에서 이름의 첫글자가 'K'보다 크고 'Y'보다 작은 사원의 사원번호, 이름, 업무, 급여, 부서번호를 출력하여라. 단, 이름순으로 정렬하여라.

  1. SELECT empno, ename, job, sal, deptno FROM emp WHERE ( SUBSTR(ename,1,1) > 'K' ) AND ( SUBSTR(ename,1,1) < 'Y' ) ORDER BY ename;
SQL> SELECT empno, ename, job, sal, deptno FROM emp WHERE ( SUBSTR(ename,1,1) > 'K' ) AND ( SUBSTR(ename,1,1) < 'Y' ) ORDER BY ename;

    EMPNO ENAME      JOB              SAL     DEPTNO
---------- ---------- --------- ---------- ----------
     7654 MARTIN     SALESMAN        1250         30
     7934 MILLER     CLERK           1300         10
     7788 SCOTT      ANALYST         3000         20
     7369 SMITH      CLERK            800         20
     7844 TURNER     SALESMAN        1500         30
     7521 WARD       SALESMAN        1250         30

 

  1. SELECT ename, substr(ename, 1), substr(ename, 1, 1),  substr(ename, 2, 2) FROM emp;

SQL> SELECT ename, substr(ename, 1), substr(ename, 1, 1),  substr(ename, 2, 2) FROM emp;

ENAME      SUBSTR(ENAME,1)      SU SUBS
---------- -------------------- -- ----
SMITH      SMITH                S  MI
ALLEN      ALLEN                A  LL
WARD       WARD                 W  AR
JONES      JONES                J  ON

+.

.
MARTIN     MARTIN               M  AR
BLAKE      BLAKE                B  LA
CLARK      CLARK                C  LA
SCOTT      SCOTT                S  CO
KING       KING                 K  IN
TURNER     TURNER               T  UR
ADAMS      ADAMS                A  DA
JAMES      JAMES                J  AM
FORD       FORD                 F  OR
MILLER     MILLER               M  IL

 

문제 4) EMP 테이블에서 부서가 20번인 사원의 사원번호, 이름, 이름의 자릿수, 급여, 급여의 자릿수를 출력하여라.

  1. SELECT empno, ename, LENGTH(ename), sal, LENGTH(sal) FROM emp WHERE deptno = 20;
SQL> SELECT empno, ename, LENGTHB(ename), sal, LENGTHB(sal) FROM emp WHERE deptno = 20;

    EMPNO ENAME      LENGTHB(ENAME)        SAL LENGTHB(SAL)
---------- ---------- -------------- ---------- ------------
     7369 SMITH                   5        800            3
     7566 JONES                   5       2975            4
     7788 SCOTT                   5       3000            4
     7876 ADAMS                   5       1100            4
     7902 FORD                    4       3000            4

 

문제 5) emp 테이블에서 급여를 30으로 나눈 나머지를 구하여 출력하여라.

  1. SELECT MOD(sal,30) FROM emp;
SQL> SELECT MOD(sal,30) FROM emp;

MOD(SAL,30)
-----------
        20
        10
        20
         5
        20
         0
        20
         0
        20
         0
        20
        20
         0
        10

 

날짜 관련 변경

  1. select * from nls_session_parameters;  
  2. //현재 세션(현재창에서만)에 설정된 환경파라미터의 값들을 조회
  3. alter session set nls_date_format='rrrr/mm/dd:hh24:mi:ss';
  4. //날짜 관련 출력형식을 YYYY/MM/DD:24시:분:초 로 출력한다.
  5. ALTER SESSION SET NLS_DATE_FORMAT='dd/mm/rr';
  6. ALTER SESSION SET NLS_DATE_FORMAT='rr/mm/dd';

 

  1. SELECT '2000/01/01' +30 from dual;
  2. // 오류 발생
  3.  SELECT to_date('2000/01/01', 'rrrr/mm/dd') +30 from dual;
  4. // '2000/01/01' 문자열을 'rrrr/mm/dd' 형식으로 변경하는 함수 to_date(,)

 

  1.  SELECT to_date('2000/01/01', 'rrrr/mm/dd') +30, sysdate  from dual;
SQL>  SELECT to_date('2000/01/01', 'rrrr/mm/dd') +30, sysdate  from dual;

TO_DATE( SYSDATE
-------- --------
00/01/31 09/04/24

 

  1. SELECT SYSDATE, SYSDATE-TO_DATE('2009/03/16', 'RRRR/MM/DD') from dual;
SQL> SELECT SYSDATE, SYSDATE-TO_DATE('2009/03/16', 'RRRR/MM/DD') from dual;

SYSDATE  SYSDATE-TO_DATE('2009/03/16','RRRR/MM/DD')
-------- ------------------------------------------
09/04/24                                 39.4715741

 

  1. SELECT SYSDATE, SYSDATE-TO_DATE('2009/03/16', 'RRRR/MM/DD'), sysdate + 20/24  from dual;
  2. 시간을 더하는 것은 + Hour / 24
SQL> SELECT SYSDATE, SYSDATE-TO_DATE('2009/03/16', 'RRRR/MM/DD'), sysdate + 20/24  from dual;

SYSDATE  SYSDATE-TO_DATE('2009/03/16','RRRR/MM/DD') SYSDATE+
-------- ------------------------------------------ --------
09/04/24                                 39.4720718 09/04/25

 

문제 6) emp 테이블에서 현재까지의 근무일수가 몇 주 몇 일 인가를 출력하여라. 단, 근무 일수가 많은 사람순으로 출력하여라.

  1. SELECT ename,   sysdate,   TRUNC(sysdate-hiredate,0) "총 근무일수",   TRUNC(  ( TRUNC(sysdate-hiredate,0) -  TRUNC(MOD( (sysdate-hiredate), 7)) ) / 7 , 0 ) "주",    TRUNC(MOD( (sysdate-hiredate), 7)) "일" FROM emp ORDER BY (sysdate-hiredate) DESC;
  2. // 아래 것도 결과는 같다.
  3. SELECT ename,   sysdate,   TRUNC(sysdate-hiredate,0) "총 근무일수",   TRUNC(TRUNC( (sysdate-hiredate)/ 7) , 0 ) "주",    TRUNC(MOD( (sysdate-hiredate), 7)) "일" FROM emp ORDER BY (sysdate-hiredate) DESC;
SQL> SELECT ename,   sysdate,   TRUNC(sysdate-hiredate,0) "총 근무일수",   TRUNC(  ( TRUNC(sysdate-h
iredate,0) -  TRUNC(MOD( (sysdate-hiredate), 7)) ) / 7 , 0 ) "주",    TRUNC(MOD( (sysdate-hiredate),
7)) "일" FROM emp ORDER BY (sysdate-hiredate) DESC;

ENAME      SYSDATE  총 근무일수         주         일
---------- -------- ----------- ---------- ----------
SMITH      09/04/24       10355       1479          2
ALLEN      09/04/24       10290       1470          0
WARD       09/04/24       10288       1469          5
JONES      09/04/24       10249       1464          1
BLAKE      09/04/24       10220       1460          0
CLARK      09/04/24       10181       1454          3
TURNER     09/04/24       10090       1441          3
MARTIN     09/04/24       10070       1438          4
KING       09/04/24       10020       1431          3
JAMES      09/04/24       10004       1429          1
FORD       09/04/24       10004       1429          1
MILLER     09/04/24        9953       1421          6
SCOTT      09/04/24        8041       1148          5
ADAMS      09/04/24        8007       1143          6

 

문제 7) emp 테이블에서 10번 부서원의 현재까지의 근무 월수를 계산하여 출력하여라.

  1. SELECT ename, hiredate, TRUNC( MONTHS_BETWEEN( sysdate, hiredate) ) From emp WHERE deptno = 10;
SQL> SELECT ename, hiredate, TRUNC( MONTHS_BETWEEN( sysdate, hiredate) ) From emp WHERE deptno = 10;


ENAME      HIREDATE TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE))
---------- -------- ---------------------------------------
CLARK      81/06/09                                     334
KING       81/11/17                                     329
MILLER     82/01/23                                     327

 

문제 8) emp 테이블에서 10번 부서원의 입사 일자부터 5개월이 지난 후 날짜를 계산하여 출력하여라.

  1. SELECT ename, hiredate, ADD_MONTHS(hiredate, 5) FROM emp WHERE deptno = 10;
  2. // ADD_MONTH  사용6
SQL> SELECT ename, hiredate, ADD_MONTHS(hiredate, 5) FROM emp WHERE deptno = 10;

ENAME      HIREDATE ADD_MONT
---------- -------- --------
CLARK      81/06/09 81/11/09
KING       81/11/17 82/04/17
MILLER     82/01/23 82/06/23

 

문제 9) emp 테이블에서 10번 부서원의 입사 일자로부터 돌아오는 금요일을 계산하여 출력하여라.

  1. SELECT ename, hiredate, NEXT_DAY(hiredate, 6) FROM emp WHERE deptno = 10;
  2. SELECT ename, hiredate, NEXT_DAY(hiredate, '금') FROM emp WHERE deptno = 10;
  3. //NEXT_DAY 사용
SQL> SELECT ename, hiredate, NEXT_DAY(hiredate, 6) FROM emp WHERE deptno = 10;

ENAME      HIREDATE NEXT_DAY
---------- -------- --------
CLARK      81/06/09 81/06/12
KING       81/11/17 81/11/20
MILLER     82/01/23 82/01/29

SQL> SELECT ename, hiredate, NEXT_DAY(hiredate, '금') FROM emp WHERE deptno = 10;

ENAME      HIREDATE NEXT_DAY
---------- -------- --------
CLARK      81/06/09 81/06/12
KING       81/11/17 81/11/20
MILLER     82/01/23 82/01/29

 

문제 10) emp 테이블에서 입사한 달의 근무 일수를 계산하여 출력하여라. 단, 일요일과 일요일도 근무 일수에 포함된다.

  1. SELECT ename, hiredate, LAST_DAY(hiredate) - hiredate FROM emp;
  2. // LAST_DAY 사용
SQL> SELECT ename, hiredate, LAST_DAY(hiredate) - hiredate FROM emp;

ENAME      HIREDATE LAST_DAY(HIREDATE)-HIREDATE
---------- -------- ---------------------------
SMITH      80/12/17                          14
ALLEN      81/02/20                           8
WARD       81/02/22                           6
JONES      81/04/02                          28
MARTIN     81/09/28                           2
BLAKE      81/05/01                          30
CLARK      81/06/09                          21
SCOTT      87/04/19                          11
KING       81/11/17                          13
TURNER     81/09/08                          22
ADAMS      87/05/23                           8
JAMES      81/12/03                          28
FORD       81/12/03                          28
MILLER     82/01/23                           8

 


  1. create table test (
    id   number,
    name varchar2(10));

 

SQL> desc test;
이름                                                  널?      유형
----------------------------------------------------- -------- ------------------------------------
ID                                                             NUMBER
NAME                                                           VARCHAR2(10)

 

  1. SELECT * FROM test;
SQL> SELECT * FROM test;

선택된 레코드가 없습니다.

 

  1. INSERT INTO test(id, name) VALUES(1, 10);
SQL> insert into test(id, name) values(1, 10);

1 개의 행이 만들어졌습니다.

 

SQL> select * from test;

       ID NAME
---------- ----------
        1 10

 

  1. SELECT ename+100 FROM emp;

 

SQL> select ename+100 from emp;
select ename+100 from emp
      *
1행에 오류:
ORA-01722: 수치가 부적합합니다

 

  1. SELECT id+10, name+100 FROM test;
SQL> select id+10, name+100 from test;

    ID+10   NAME+100
---------- ----------
       11        110

 

현재의 세기, 년, 월, 일, 시, 분, 초 정보 및 요일 정보를 확인

  1. SELECT sysdate, to_char(sysdate, 'rrrr/mm/dd:hh24:mi:ss:day') FROM dual;
SQL> SELECT sysdate, to_char(sysdate, 'rrrr/mm/dd:hh24:mi:ss:day') FROM dual;

SYSDATE  TO_CHAR(SYSDATE,'RRRR/MM/DD:H
-------- -----------------------------
09/04/24 2009/04/24:13:57:11:금요일

 

rr 과 yy의 차이점

rr : 년도가 0~49년도일 경우에는 현재세기로 인식하고, 50~99년도일 경우에는 이전세기로 인식

yy : 무조건 현재세기로 인식

 

  1. SELECT * FROM emp WHERE hiredate > '81/01/01';

 

SQL> SELECT * FROM emp WHERE hiredate > '81/01/01';   = 1981/01/01

    EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
     7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30
     7521 WARD       SALESMAN        7698 81/02/22       1250        500         30
     7566 JONES      MANAGER         7839 81/04/02       2975                    20
     7654 MARTIN     SALESMAN        7698 81/09/28       1250       1400         30
     7698 BLAKE      MANAGER         7839 81/05/01       2850                    30
     7782 CLARK      MANAGER         7839 81/06/09       2450                    10
     7788 SCOTT      ANALYST         7566 87/04/19       3000                    20
     7839 KING       PRESIDENT            81/11/17       5000                    10
     7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30
     7876 ADAMS      CLERK           7788 87/05/23       1100                    20
     7900 JAMES      CLERK           7698 81/12/03        950                    30
     7902 FORD       ANALYST         7566 81/12/03       3000                    20
     7934 MILLER     CLERK           7782 82/01/23       1300                    10

 

  1. alter session set nls_date_format='yy/mm/dd';

 

  1. SELECT * FROM emp WHERE hiredate > '81/01/01';  '81/01/01' = 2081/01/01  값 없음!!

 

  1. SELECT ename, sal, to_char(sal, '$9,999.9') FROM emp;
SQL> SELECT ename, sal, to_char(sal, '$9,999') FROM emp;

ENAME             SAL TO_CHAR
---------- ---------- -------
SMITH             800    $800
ALLEN            1600  $1,600
WARD             1250  $1,250
JONES            2975  $2,975
MARTIN           1250  $1,250
BLAKE            2850  $2,850
CLARK            2450  $2,450
SCOTT            3000  $3,000
KING             5000  $5,000
TURNER           1500  $1,500
ADAMS            1100  $1,100
JAMES             950    $950
FORD             3000  $3,000
MILLER           1300  $1,300

14 개의 행이 선택되었습니다.

SQL> SELECT ename, sal, to_char(sal, '$9,999.9') FROM emp;

ENAME             SAL TO_CHAR(S
---------- ---------- ---------
SMITH             800    $800.0
ALLEN            1600  $1,600.0
WARD             1250  $1,250.0
JONES            2975  $2,975.0
MARTIN           1250  $1,250.0
BLAKE            2850  $2,850.0
CLARK            2450  $2,450.0
SCOTT            3000  $3,000.0
KING             5000  $5,000.0
TURNER           1500  $1,500.0
ADAMS            1100  $1,100.0
JAMES             950    $950.0
FORD             3000  $3,000.0
MILLER           1300  $1,300.0

 

  1. SELECT ename, sal, to_char(sal, 'L9,999.9') FROM emp;
  2. //L은 로컬
SQL> SELECT ename, sal, to_char(sal, 'L9,999.9') FROM emp;

ENAME             SAL TO_CHAR(SAL,'L9,99
---------- ---------- ------------------
SMITH             800            ₩800.0
ALLEN            1600          ₩1,600.0
WARD             1250          ₩1,250.0
JONES            2975          ₩2,975.0
MARTIN           1250          ₩1,250.0
BLAKE            2850          ₩2,850.0
CLARK            2450          ₩2,450.0
SCOTT            3000          ₩3,000.0
KING             5000          ₩5,000.0
TURNER           1500          ₩1,500.0
ADAMS            1100          ₩1,100.0
JAMES             950            ₩950.0
FORD             3000          ₩3,000.0
MILLER           1300          ₩1,300.0

 

  1. SELECT ename, sal, to_char(sal, 'L9,999.9'), TO_CHAR(sal, '999') FROM emp;
SQL> SELECT ename, sal, to_char(sal, 'L9,999.9'), TO_CHAR(sal, '999') FROM emp;

ENAME             SAL TO_CHAR(SAL,'L9,99 TO_C
---------- ---------- ------------------ ----
SMITH             800            ₩800.0  800
ALLEN            1600          ₩1,600.0 ####
WARD             1250          ₩1,250.0 ####
JONES            2975          ₩2,975.0 ####
MARTIN           1250          ₩1,250.0 ####
BLAKE            2850          ₩2,850.0 ####
CLARK            2450          ₩2,450.0 ####
SCOTT            3000          ₩3,000.0 ####
KING             5000          ₩5,000.0 ####
TURNER           1500          ₩1,500.0 ####
ADAMS            1100          ₩1,100.0 ####
JAMES             950            ₩950.0  950
FORD             3000          ₩3,000.0 ####
MILLER           1300          ₩1,300.0 ####   // 자릿수를 넘어서면 # 정자로 표시됨. 엑셀처럼? 아니면 엑셀이 DB처럼!?

 

  1. INSERT into emp(empno, ename, hiredate) VALUES(8000, '홍길동', '10-12-2009:10시');
SQL> INSERT into emp(empno, ename, hiredate) VALUES(8000, '홍길동', '10-12-2009:10시');
INSERT into emp(empno, ename, hiredate) VALUES(8000, '홍길동', '10-12-2009:10시')
                                                              *
1행에 오류:
ORA-01830: 날짜 형식의 지정에 불필요한 데이터가 포함되어 있습니다

 

  1. INSERT into emp(empno, ename, hiredate) VALUES(8000, '홍길동', TO_DATE('10-12-2009:10', 'dd-mm-rrrr:hh24') );
SQL> INSERT into emp(empno, ename, hiredate) VALUES(8000, '홍길동', TO_DATE('10-12-2009:10', 'dd-mm-
rrrr:hh24') );

1 개의 행이 만들어졌습니다.

SQL> select * from emp;

    EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
     8000 홍길동                          2009/12/10
     7369 SMITH      CLERK           7902 1980/12/17        800                    20
     7499 ALLEN      SALESMAN        7698 1981/02/20       1600        300         30
     7521 WARD       SALESMAN        7698 1981/02/22       1250        500         30
     7566 JONES      MANAGER         7839 1981/04/02       2975                    20
     7654 MARTIN     SALESMAN        7698 1981/09/28       1250       1400         30
     7698 BLAKE      MANAGER         7839 1981/05/01       2850                    30
     7782 CLARK      MANAGER         7839 1981/06/09       2450                    10
     7788 SCOTT      ANALYST         7566 1987/04/19       3000                    20
     7839 KING       PRESIDENT            1981/11/17       5000                    10
     7844 TURNER     SALESMAN        7698 1981/09/08       1500          0         30
     7876 ADAMS      CLERK           7788 1987/05/23       1100                    20
     7900 JAMES      CLERK           7698 1981/12/03        950                    30
     7902 FORD       ANALYST         7566 1981/12/03       3000                    20
     7934 MILLER     CLERK           7782 1982/01/23       1300                    10

 

  1. SELECT ename, deptno, DECODE(deptno, 10, '10번 부서', 20, '20번 부서', 30, '30번 부서', '기타부서') "부서",
  2. CASE WHEN deptno = 10  THEN '10번 부서'
  3. WHEN deptno = 20  THEN '20번 부서'
  4. WHEN deptno = 30  THEN '30번 부서'
  5. ELSE '기타부서' end "case문"  FROM emp;
SQL>    SELECT ename, deptno, DECODE(deptno, 10, '10번 부서', 20, '20번 부서', 30, '30번 부서', '기
타부서') "부서",
  2     CASE WHEN deptno = 10  THEN '10번 부서'
  3     WHEN deptno = 20  THEN '20번 부서'
  4     WHEN deptno = 30  THEN '30번 부서'
  5     ELSE '기타부서' end "case문"  FROM emp;

ENAME          DEPTNO 부서      case문
---------- ---------- --------- ---------
홍길동                기타부서  기타부서
SMITH              20 20번 부서 20번 부서
ALLEN              30 30번 부서 30번 부서
WARD               30 30번 부서 30번 부서
JONES              20 20번 부서 20번 부서
MARTIN             30 30번 부서 30번 부서
BLAKE              30 30번 부서 30번 부서
CLARK              10 10번 부서 10번 부서
SCOTT              20 20번 부서 20번 부서
KING               10 10번 부서 10번 부서
TURNER             30 30번 부서 30번 부서
ADAMS              20 20번 부서 20번 부서
JAMES              30 30번 부서 30번 부서
FORD               20 20번 부서 20번 부서
MILLER             10 10번 부서 10번 부서

 

이 글은 스프링노트에서 작성되었습니다.

허니몬의 IT 이야기

저와 함께 자바 전문가 과정을 듣고 있는 동기들이 커맨드 창에서 작업을 어려워 하는 것을 보고, 조금이라도 수월하게 할 수 있도록 커맨드 창에서 디렉토리 이동과 손쉽게 컴파일 하는 방법을 설명하여보고자 아래의 글을 작성하여 보았습니다. ^^ 천천히 따라해 보시면 손쉽게 커맨드 창에서 컴파일을 하는 방법을 익히실 수 있을 겁니다. 어렵거나 모르시는 부분이 있을 경우에는 댓글에 적어 주시면, 보강하거나 추가 설명하여 드리겠습니다.



윈도우에서 도스창을 불러내는 방법은 다들 알고 계실 겁니다. ^^

윈도우 키 + R(실행) 을 눌러 뜬 실행창(혹은 [시작] - [실행]을 누르셔도 됩니다.

CMD.jpg

그러면, 어떤 이에게는 추억의 그 녀석, 어떤 이에게는 너무나 낯설은 그녀석! 바로 CMD(cmd.exe - 위키백과) 창이 뜹니다.

CMD실행창.jpg

도스시절부터 컴퓨터를 꾸준하게 해오신 분이라면, 프롬프트가 깜빡이는 커맨드 창은 잠시나마 도스(도스 - 위키백과) 시절의 추억을 떠올리게 됩니다. ^^

자바를 처음 배우는 과정에서, 위의 커맨드 창에서 컴파일러(javac.exe)와 실행파일(java.exe)를 다루는 과정이 많이 나올 겁니다. 하지만, 도스 혹은 커맨드 창이 낯설은 분들은 작업하는 폴더를 찾아가는 것 자체가 어려울 수 있습니다. ^^;

그래서 조금이라도 자바를 배우는 과정을 수월하게 할 수 있도록 커맨드 창의 기능 활용할 수 있는 방법을 적어봅니다.

 

우선, 커맨드 창에서 폴더(도스 시절에는 디렉터리(디렉터리 - 위키백과)와 파일로 구분하였지만, 윈도우에 들어오면서 폴더의 개념으로 바뀜)를 옮겨다니는 방법을 소개하겠습니다. Change Directory, 줄여서 CD 라는 명령어 입니다. ^^

 CD_01(1).jpg

  1. cd \

라고 입력하시면 해당 드라이브의 루트 디렉터리로 이동을 합니다. 윈도우에서 커맨드창을 열게 되면, 처음 위치(설정을 해주지 않을 경우)는 윈도우 문서폴더의 사용자 이름의 폴더에서 시작을 하게 됩니다. java 작성 작업을 같은 폴더에서 할 경우가 아니라면, 작성 작업을 한 폴더로 가야 합니다.

원하는 폴더로 쉽게 가는 방법을 알려드리겠습니다. ^^

 

작업 폴더는 가능하면, 상위에 위치하는 것이 접근하기가 수월합니다. 저 같은 경우는 쓸데없이 폴더를 늘리는 경향이 있어서 경로를 찾아가는 것이 쉬운 일은 아닙니다.

제가 찾아가고자 하는 윈도우 탐색기로 볼 경우, 폴더의 위치는 다음과 같습니다.

Folder.jpg

원하는 곳으로 가기 위해서는, 가장 기초적인 방법은 아래 그림과 같습니다.

CD_02.jpg

여러번 타자를 입력해야 하니 번거롭죠!? ^^ 한방에 폴더를 이동하는 방법을 알아보도록 하겠습니다.

우선 윈도우 탐색기를 열도록 합시다.

explorer.jpg

그런 다음 주소표시줄을 활성화 시킵니다.

CD_03.jpg

컴퓨터에 따라서 아래와 같이 나올 수가 있습니다.

explorer_01.jpg

그러면 우선!! 도구 모음 잠금 을 해제합니다!! 그런 다음 주소 창을 과감하게 아래로 드래그 해줍니다.

explorer_02.jpg

explorer_03.jpg

윈도우 탐색기에서 작업을 하는 폴더까지 이동을 합니다. 그러면 주소 창에는 지금 작업하고 있는 폴더의 위치가 나타납니다.

explorer_04.jpg

주소창의 내용을 모두 블록으로 선택하고 '복사(C)' 혹은 Ctrl + C 를 누릅니다.

그런 다음 커맨드창으로 이동합니다.

CMD_01.jpg

커맨드에서 cd 를 입력하시고 한칸 띄워주신 다음 마우스 오른쪽 버튼을 눌러줍니다. ㅡㅅ-)b 붙여넣기를 클릭하세요. Ctrl + C는 안먹힙니다.

왜냐하면, 커맨드 창에서 Ctrl + C는 다른 작동을 하는 키보드 명령입니다.

CMD_02.jpg

그럼 아래와 같이 작업 표시줄에서 불러온 주소줄의 내용이 쭈욱 옮겨져 옵니다.

CMD_03.jpg

엔터를 치면!! 치면!!

CMD_04.jpg

보시는 것처럼!! 아무 변화가 없습니다. OTL... 뭐가 잘못된걸까요?

하지만, 실망하지 않으셔도 됩니다. ㅡㅅ-)b I 드라이브로 이동을 해봅시다.

  1. i: 

를 입력하세요.

CMD_05.jpg

보시는 것처럼 I 드라이브에서 작업을 희망하는 작업 폴더로 변경이 됩니다. 참 쉽죠잉~~?? ^^

 

이제 간단하게 컴파일 작업을 해볼까요!?

CMD_06.jpg

때마침, 지금 제가 수업을 들으면서 작성하고 있는 메모장을 프로그래밍한 java 파일이 보입니다. 이걸 컴파일 해볼까요? ^^

CMD_07.jpg

컴파일을 돌리기 위해 javac notepad.java(윈도우는 대소문자 구분을 안합니다) 라고 직접 입력하셨나요!?


그러실 필요가 전혀 없습니다!! ^^ 지금부터 설명 들어갑니다.

우선 javac n 을 입력하세요.

CMD_08.jpg

그런 다음 키보드 왼편에 보이는 Tab 키를 누릅니다. ^^ 탁!!

CMD_09.jpg

그러나 우리가 찾는 파일이 아니죠!? 다시한번 Tab 키를 누릅니다. ^^ 탁!!

CMD_10.jpg

우리가 찾는 파일이 나왔습니다. ㅡㅅ-)b 그럼 나머지는 엔터키를 치는 일 뿐....

찾고자 하는 파일의 머릿글자를 치고 Tab 키를 누르면, 커맨드 창에서는 해당 머릿글자를 가지는 파일들을 영문자 오름차순의 순으로

화면에 보여줍니다. 원하는 파일을 찾을 때까지 Tab 키를 눌러주시면, 굳이 파일의 이름을 일일이 입력하는 수고를 더실 수 있습니다.

참 쉽죠잉!? 커맨드에서 자바 컴파일을 돌리고 실행하는 일, 어렵지 않습니다. ^^ 한번 따라해보세요.

 

아, 그리고 간단한 팁 또 하나.

방금 실행했던 명령을 다시 한번 실행해야 하는데, 또 다시 입력을 해야 할까요!?

아닙니다. 키보드의 ↑ 커서를 한번 딱 쳐주시면 조금 전에 실행된 명령어가 나옵니다. 해보세요!! ^^

키보드의 기능키 F3을 눌러주셔도 같은 기능을 합니다.

 


윈도우 작업폴더 어디에서든지 java.exe 와 javac.exe 를 실행하기 위해서는, PATH 변경작업을 해줘야 합니다. ^^

우선 윈도우 탐색기를 열어서 Program Files\Java\jdk1.6.0_13\bin 로 이동을 합니다.

주소창의 내용을 복사합니다. 위에서 커맨드의 디렉터리를 이동하기 위한 방법에서 한번 해보셨죠? ^^ 블록 설정하고 Ctrl + C 눌러주세요.

그런 후, 내 컴퓨터에서 마우스 우클릭을 하고 속성을 누릅니다.

explorer_06.jpg

[고급] - [환경변수]를 클릭합니다.

explorer_07.jpg

explorer_08.jpg

편집(I)를 클릭합니다.

explorer_09.jpg

보시는 것처럼, 변수 값(V)의 가장 끝에 붙여넣기(Ctrl+V)를 해주시면 작업이 완료됩니다.

앞에 있는 경로와 구분하기 위하여 세미콜론(;)을 넣어주시는 것을 빼먹으시면 안됩니다.

이제 확인~ 확인~ 확인 눌러서 창을 닫아 주시면 되겠습니다. 그럼 커맨드 창에서 java, javac를 사용하기 위한 설정은 끝이 납니다.

 

ㅡㅅ-)b 허니몬과 함께 자바를 배워봅시다!! 작업의 세계로 풍더더덩!! 빠져 보겠습니다. ^^

즐거운 하루 보내세요.

 

 

이 글은 스프링노트에서 작성되었습니다.

1 ··· 3 4 5 6 7 8
블로그 이미지

Email : ihoneymon@gmail.com 안녕하세요, 꿀괴물 입니다. ^^ 멋진 비행을 준비 하는 블로그 입니다. 만능형 인간이 되어 많은 이들에게 인정받고, 즐겁고 행복하게 살기를 간절히 원합니다!! 달콤살벌한 꿀괴물의 좌충우돌 파란만장한 여정을 지켜봐주세요!! ^^

허니몬