1. 탐색기에서 도구-폴더옵션-파일형식 선택 후 dsw 선택

2. 고급 - 편집

3. DDE 사용 체크 해제

4. 명령을 실행할 응용 프로그램에 다음 입력
"%VS6_HOME%\Common\MSDev98\Bin\MSDEV.EXE" "%1"

여기서 %VS6_HOME%의 경우 설치 경로에 따라 맞게 수정할 것.
따옴표로 묶는 것은 스페이스 인식을 제대로 시키기 위함.
%1은 실행 인자로서, 실행할 ***.dsw가 들어 올 것임.

Posted by 창신다이

OFFSET(기준셀, 결과의 왼쪽 위에 있는 셀이 참조할 행, 결과의 왼쪽 위에 있는 셀이 참조할 열,  결과 영역의 높이-단위,행갯수, 결과 영역의 너비-단위,열갯수)

- 두번째, 세번째 인자는 마이너스 값을 가질 수 없음.
- 네번째, 다섯번째 결과 영역의 높이, 너비는 생략하면 기준셀과 같은 것으로 간주함.

사용예. Sheet2에서 B2 부터 B500 중에 셀에 값이 있는 것만 영역으로 설정
OFFSET(Sheet2!$B$2, 0, 0, COUNTA(Sheet2!$B$2:Sheet2!$B$500), 1)
* 여기서 셀이름 B2에서 $B$2라고 사용한 것은 절대주소를 지정하는 방법으로 엑셀의 자동 복사 기능을 사용했을때 해당 참조 셀이 변하지 않도록 하기 위함이다.
* COUNTA는 인자로 영역의 범위를 받으며 셀에 값이 있는 것만 반환.

활용예1. Sheet2에서 B2 부터 B500 중에 셀에 값이 있고, "홍길동"인 것의 갯수
COUNTIF(OFFSET(Sheet2!$B$2, 0, 0, COUNTA(Sheet2!$B$2:Sheet2!$B$500), 1), "홍길동")

활용예2. 특정값을 찾기 위해 조건절 두번 적용.
COUNTIF(OFFSET(세부내용!$B$2, MATCH(C5, 세부내용!$B$2:세부내용!$B$500,0)-1,12,COUNTIF(OFFSET(세부내용!$B$2, 0, 0, COUNTA(세부내용!$B$2:세부내용!$B$500),1), C5), 1), TODAY()-1)

*B열에서 값이 있고, 특정 값에 해당하는 것을 하나을 영역으로 만들고 그 영역에서 n번째(여기서는 12번째) 열 중에서 어제 날짜 값을 갖는 것의 갯수를 구함.

Posted by 창신다이
MATCH(찾을값, 찾을범위, 타입)
특정영역에서 특정값을 찾아서 위치를 구한다.
찾을범위가 행일 경우 열을 반환, 열일 경우 행을 반환.

타입은 세가지가 있다.
-1 : 찾을값 보다 크거나 같은값 중 가장 작은 값을 찾는다.(반드시 내림차순이어야 함.)
 0 : 찾을값과 같은 첫째값을 찾는다.(정렬여부 상관 없음.)
 1 : 찾을값 보다 작거나 같은값 중 가장 큰 값을 찾는다.(반드시 오름차순이어야 함.)

타입이 세가지가 있지만 실제 사용은 0이 대부분일 것임.

사용목적.
OFFSET 함수에서 행의 수를 찾기 위해서 사용하였음.
Posted by 창신다이
ISBLANK 값이 빈 셀을 참조하는 경우
ISERR 값이 #N/A 외의 오류 값을 참조하는 경우
ISERROR 값이 오류 값(#N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, #NULL!)을 참조하는 경우
ISLOGICAL 값이 논리값을 참조하는 경우
ISNA 값이 #N/A (사용할 수 없는 값) 오류 값을 참조하는 경우
ISNONTEXT 값이 텍스트가 아닌 항목을 참조하는 경우. 이 함수는 값이 빈 셀을 참조하는 경우에 TRUE를 반환합니다.
ISNUMBER 값이 숫자를 참조하는 경우
ISREF 값이 참조를 참조하는 경우
ISTEXT 값이 텍스트를 참조하는 경우

Microsoft Excel 도움말 참조.
Posted by 창신다이
VLOOKUP(특정값,영역,열인덱스,근사값여부)
영역을 설정하고 특정값을 해당영역에서 찾으며, 만약 값이 있을 경우 그 값이 포함된 행에서 영역의 기
준열에서 입력한 인덱스 번째 열의 값을 반환한다.
근사값여부는 생략 가능하며, 생략하거나 true일 경우 정확한 값을 찾고, false일 경우 근사값을 찾는다.

영역 설정 방법은 E3:Q200 과 같이 시작 셀과 끝 셀을 지정한다.
만약 다른 시트에 있을경우 시트명!E3:Q200 이되고,
다른 파일에 있을경우 [파일명]시트명!E3:Q200 으로 할 수 있다.

유사하게 HLOOKUP이 있다.
Posted by 창신다이

INDIREC함수는 인자로 문자열을 받는다.

문자열로 A100과 같은 값이 들어오면 셀 A100에 있는 값을 리턴한다.

사용예.
현재 행의 특정 열 값을 얻을 때 유용.
INDIRECT("A"&ROW())

Posted by 창신다이

OR함수

2008. 2. 27. 15:33

OR함수는 가변인자를 넘겨받으며, 각 인자는 true, false 값을 가져야 한다.

사용예.
IF(OR(A="1", A="2", A="3"),"순위권","순위밖")

Posted by 창신다이
interface II {
  public abstract void method(); 
  //interface에서 멤버 변수들은 디폴트로 public static final(상수선언) 
  //멤버 함수들은 디폴트로 public abstract
}

class CB implements II{
 //interface를 상속 받은 클래스는 상속 받은 interface의 모든 메쏘드를 구현해야함
 public void method() { 
  System.out.println("method in CB");
 }
}

class CC implements II {
 public void method() {
  System.out.println("method in CC");
 }
}

//클래스 CA는  팩토리 클래스. 인자에 따라 II를 구현한 클래스의 method()를 호출하게됨
//virtual function invocation
class CA {
 public void method(II i) {
  i.method();
 }
}

class CExample {
 public static void main(String[] args) {
  CA oa = new CA();
  oa.method(new CB());
  oa.method(new CC());  
 }
}

<Virtual Method Invocation의 원리>
1. Compile Time Type : 부모의 메모스를 호출(II의 method 호출)
2. Runtime Type : 자식의 메소드가 실행(II를 상속받아서 구현한 CB의 method 혹은 CC의 method 호출) "상속관계의 오버라이딩된 메소드에서만 발생하는 원리"

Posted by 창신다이

첫번째로 속성 - 디버깅 - 명령 에서 콤보 박스에서 기본웹브라우저를 선택하면 해당 OCX를 OBJECT로 삽입하는 HTML 파일을 인자로 해서 디버깅을 할 수 있다.

이때 HTML 페이지에서 OBJECT태그에는 id속성과, classid속성만 채워지면 된다.

두번째로 속성 - 디버깅 - 명령 에서 콤보 박스에서 ActiveX Control Test Container 를 선택한다. 이때 인자는 필요없다.

두번째 방법으로 디버깅을 시작하면 ActiveX Control Test Container
프로그램이 실행되고,
메뉴 - 편집 - 새 컨트롤 삽입에서 해당 OCX id를 선택하면 디버깅모드로 들어간다.

두번째 방법에서 ocx id를 인자로 넣어주는 방법이 있는지 좀 더 살펴봐야 하겠다

Posted by 창신다이
QPST로 연결했을 때 폰번호 (0)로 나오는 것
-> SPC에 580918 입력함.
Posted by 창신다이

한글VC2005에서는 PPC2003은 기본적으로 한글이 지원된다.

Windows Mobile 5.0은  추가로 SDK를 설치하고 한글 에뮬레이터를 설치해야한다.

MS다운로드 URL:
http://www.microsoft.com/downloads/details.aspx?FamilyID=eec33ae3-c129-4c25-abaa-18e8e842178f&DisplayLang=en

Posted by 창신다이

 

1.    다음 SELECT 문장에서 Column Header로 출력되는 것은?

 

       SELECT  empno, ename Employee’s Name

       FROM   emp;

 

a.    empno, employee’s name

b. Empno, Employee’s Name

c. EMPNO, Employee’s Name

d. EMPNO, EMPLOYEE’S NAME

 

<정답> C

<해설> 별칭을 사용할 때 대소문자, 여백, 띄워쓰기를 적용하기 위해서는 반드시

      인용부호를 함께 사용해야 합니다.

<난이도>  3

 

 

2.    다음 문장을 실행했을 때 결과로 나올 수 있는 것은?

 

SELECT    name

FROM      s_customer

WHERE     name LIKE ‘%X\_Y%’ ESCAPE ‘\’;

 

a.    THE X\_Y SPORTS

b.    THE X\&Y SPORTS

c.    THE X&Y SPORTS

d.    THE X_Y SPORTS

 

<정답> D

<해설> _(언더-)를 데이터로 표현하기 위해서는 이스케이프 문자를 함께

사용해야 합니다.

<난이도>  3

 

 

3.    다음 문장을 실행한 결과로 맞는 것은?

 

       SELECT ROUND(TO_DATE(‘25-MAY-98’, ‘DD-MON-YY’), ‘MONTH’)

       FROM   DUAL;

 

a.    01-JAN-98

b. 31-APR-98

c. 01-MAY-98

e.    31-MAY-98

f.    01-JUN-98

 

<정답> F

<해설> 날자 값을 년도를 기준으로 반올림하면 다음 년도의 1 1일로

 반올림되고, 월을 기준으로 반올림하면 다음 달의 1일로 반올림

 됩니다.

<난이도>  3

 

 

4.    두 테이블 간에 self join을 하는 SELECT문인 것은?

 

a.    SELECT  e.ename, e.sal, d.dname

FROM   emp e, dept d

WHERE  e.deptno = d.deptno;

b.    SELECT e.ename, e.job, e.sal, s.grade

FROM  emp e, salgrade s

WHERE e.sal BETWEEN s.losal AND s.hisal;

c.    SELECT e.ename, e.sal, d.dname

FROM  emp e, dept d

WHERE e.deptno = d.deptno(+);

d.    SELECT w.ename, m.ename

FROM  emp w, emp m

WHERE w.mgr = m.empno;

 

<정답> D

<해설> SELF 조인이란 하나의 테이블을 두개의 테이블인 것 처럼 조인하는

방법을 의미합니다.

<난이도>  3

 

 

5.    다음 SQL 명령문에서 ERROR가 발생하는 행은?

 

a. SELECT ename, sum(sal)  Salary

b.    FROM   emp

c.    WHERE sal > 1000

d.    ORDER BY 2;

 

<정답> A

<해설> 복합 함수는 관련없는 컬럼과 함께 사용할 수 없습니다.

<난이도>  3

 

 

6.    다음 subquery를 사용하는 문장 중 문법에 맞지 않게 작성된 것은?

 

a.SELECT * FROM emp

WHERE deptno = (SELECT deptno FROM emp

 WHERE ename = ‘Smith’);

b.    DELETE emp

WHERE ename = (SELECT ename FROM emp

 WHERE empno = 200);

c.    INSERT INTO emp

AS SELECT  * FROM employee;

d.    CREATE TABLE emp2

AS SELECT * FROM emp;

 

<정답> C

<해설> 서브쿼리를 이용한 INSERT문에는 AS절을 사용할 수 없습니다.

<난이도>  3

 

 

7.    다음 문장에서 error가 발생하는 행은(두 가지)?

 

       CREATE TABLE 1998_orders

       (id          NUMBER(7),

       customer_id  NUMBER(7),

       total        NUMBER(11, 2),

       filled CHAR(1)

       CONSTRAINT ord_filled_sk CHECK(filled IN (‘Y’, ‘N’)),

       CONSTRAINT ord_id_pk PRIMARY KEY(id, customer_id),

       CONSTRAINT ord_total_nn NOT NULL(total));

 

a. CREATE TABLE 1998_orders

b. total  NUMBER(11,2),

c. CONSTRAINT ord_filled_ck CHECK (filled IN (‘Y’, ‘N’)),

d. CONSTRAINT ord_id_pk PRIMARY KEY(id, customer_id),

e. CONSTRAINT ord_total_nn NOT NULL(total));

 

<정답> A, E

<해설> 테이블 명의 선두에는 숫자 값을 사용할 수 없습니다.

       또한, NOT NULL 제약조건은 컬럼 레벨로만 사용할 수 있으며

       테이블 레벨로는 정의할 수 없는 문법입니다.

<난이도>  4

 

 

8.    다음의 SQL 명령문을 순서대로 실행했을 때 database에 영구적으로 반영되는 문장은? 

 

1.  INSERT INTO emp (empno, ename, deptno)

VALUES (999, ‘Smith’, 10);

2          SAVEPOINT a;

3          DELETE emp

WHERE empno = 202;

4          SAVEPOINT b;

5          UPDATE emp

SET ename = ‘Clark’;

6          ROLLBACK TO SAVEPOINT a;

7          INSERT INTO emp (empno, ename, deptno)

VALUES (300, ‘Thomas’, 30);

8          SAVEPOINT c;

9          DELETE emp

WHERE deptno = 20;

10      COMMIT;

 

a. 1, 3, 5, 7, 9

b. 1, 3, 5, 7

c. 3, 5, 7, 9

d. 1, 7, 9

 

<정답> D

<해설> 6번에서 SAVEPOINT A 이후의 모든 트랜잭션을 롤백했기 때문에

       3,4,5번 트랙잭션은 모두 취소됩니다.

<난이도>  4

 

 

9.    다음 문장이 하는 일은?

 

ALTER TABLE  s_emp

MODIFY    (title VARCHAR2(20));

 

a. s_emp table title column을 추가한다.

b. s_emp table에서 title column datatype을 변경한다.

c. s_emp table title column의 제약조건을 삭제한다.

d. s_emp table title column 의 제약조건을 추가한다.

 

<정답> B

<해설> ALTER TABLE 문법에서 MODIFY 문법은 테이블을 구조를 변경할 때

사용합니다.

<난이도>  3

 

 

10.다음 명령문을 실행하면 결과로 나오는 값은?

 

SELECT    s_dept_id.CURRVAL

FROM      SYS.dual;

 

a. s_dept_id sequence의 현재 값

b. s_dept_id cursor의 현재 값

c. s_dept_id index의 현재 값

d. dual table s_dep_id column의 값

 

<정답> A

<해설> CURRVAL, NEXTVAL 문법은 연속적인 번로를 부여해 주는 시퀀스를

생성할 때 사용합니다.

<난이도>  3

 

 

11.다음 문장이 하는 일은?

 

CREATE USER terry IDENTIFIED BY terry98;

 

a. terry라는 user password terry98로 변경한다.

b. terry라는 user의 이름을 terry98로 변경한다.

c. terry라는 user를 생성한다.

d. terry라는 user password를 생성한다.

 

<정답> C

<해설> TERRY라는 데이터베이스 계정에게 TIGER라는 암호를 부여하여 사용자를

생성합니다.

<난이도>  3

 

 

12.harry라는 user가 다음 문장을 실행했을 경우 다음 보기 중 옳은 것은?

 

       GRANT UPDATE (ename, sal)

       ON emp

       TO scott, rich;

 

a. scott harryemp table ename, sal column 내용을 조회할 수 있다.

b. harry rich emp table ename, sal column  내용을 조회할 수 있다.

c. scott harry emp table ename, sal column 내용을 수정할 수 있다.

d. harry scott emp table ename, sal column 내용을 수정할 수 있다.

 

<정답> C

<해설> SCOTTHARRYEMP table ename, sal column 내용을 수정할 수

있습니다

<난이도>  3

 

 

13.scott가 실행한 다음 문장에 의한 효과로 맞는 것은?

 

CREATE SYNONYM emp

FOR ed.emp;

 

a. 모든 USER ed.emp 사용시 스키마를 명시할 필요가 없어진다.

b. scott ed.emp 사용시 스키마를 명시할 필요가 없어진다.

c. ed ed.emp 사용시 스키마를 명시할 필요가 없어진다.

d. 모든 USER ed.emp를 사용할 수 있게 된다.

 

<정답> B

<해설> SCOTTHARRYEMP table ename, sal column 내용을 수정할 수

있습니다

<난이도>  3

 

 

14.EXPLICIT CURSOR를 사용할 때, 각 행을 FETCH한 후 할 일은?

 

a. CURSOR OPEN한다.

b. CURSOR CLOSE한다.

c. CURSOR를 선언한다.

d. LOOP의 종료 조건을 초기화한다.

 

<정답> B

<해설> 커서 선언 à OPEN à FETCH à CLOSE

<난이도>  3

 

 

15. 예외 처리부에서 WHEN OTHERS를 사용할 수 있는 횟수는?

 

a. 1

b. 2

c. 3

d .한없이.

e.    NONE

 

<정답> A

<해설> EXCEPTION절에는 OTHERS를 오직 한번만 정의할 수 있습니다.

<난이도>  3

 

 

16. 다음 중에서  PL-SQL 블록의 변수 유형이 아닌 것은 ?

 

a.       SCLAR 변수

b.      %TYPE 변수

c.       GLOBAL 변수

d.      COMPOSITE 변수

e.       %ROWTYPE 변수

f.        BIND 변수

 

<정답> C

<해설> PL-SQL에는 글로벌 변수를 정의하는 문법 유형이 없습니다.

<난이도>  3

 

 

17. PL/SQL 블록에서 매개변수를 전달하는 방법이 아닌 것은 ?

 

a. 위치에 의한 전달방법

b. 이름에 의한 전달방법

c. 데이터 타입에 의해 전달하는 방법

d. 여러 가지 기능을 함께 이용하여 전달하는 방법

 

 

<정답> C

<해설> 데이터 타입에 의한 전달방법은 없습니다.

<난이도>  3

 

 

18. 집합 연산자의 종류가 아닌 것은 ?

 

a.    UNION 연산자

b.    INTERSECT 연산자

c.    MINUS 연산자

d.    UNION ALL 연산자

e.    JOIN 연산자

 

 

<정답> E

<해설> JOIN 연산자는 집합 연산자의 종류가 아닙니다.

<난이도>  3

 

 

19. DB 무결성(Integrity)을 보장해 줄 수 있는 방법이 아닌 은?

   

  1. 프로그램을 이용하는 방법
  2. 데이터베이스 트리거를 이용하는 방법
  3. (Lock) 기능을 이용하는 방법
  4. 제약조건을 이용하는 방법

 

<정답> C

<해설> 락 기능은 데이터의 일관성을 보장하기 위한 기법입니다.

<난이도>  4

 

 

20. SQL 언어의 단점을 모두 고르시오.

 

a. 비교문을 사용할 수 있다.

b. 반복문을 사용할 수 없다.

c. 문장이 실행될 때 마다 구문분석 된다.

d. 보안 기능을 설정할 수 있다.

e. SQL 언어는 표준화되어 있지 않다.

f. 네트워크의 트래픽을 줄여준다.

 

<정답> B, C

<해설> SQL 언어는 비교문을 사용할 수 없습니다.

     보안 기능에 노출되어 있습니다.

     ANSI에 의한 표준화되어 있습니다.

   네트워크의 트래픽을 증가시킵니다.

<난이도>  4

 

Posted by 창신다이

제 3장. 연습문제 해답(92-94페이지). 총 32문항

1. 문제) 부서번호가 10번인 부서의 사람 중 사원번호, 이름, 월급을 출력하라

SELECT empno, ename, sal
FROM emp
WHERE deptno = 10;

2. 문제) 사원번호가 7369인 사람 중 이름, 입사일, 부서번호를 출력하라.

SELECT ename, hiredate, deptno
FROM emp
WHERE empno = 7369

3. 문제) 이름이 ALLEN인 사람의 모든 정보를 출력하라.

SELECT *
FROM emp
WHERE ename = 'ALLEN';

4. 문제) 입사일이 83/01/12인 사원의 이름, 부서번호, 월급을 출력하라.

alter session set nls_date_format = 'YYYY/MM/DD';
SELECT ename, deptno, sal
FROM emp WHERE hiredate = '1983/01/12';

5. 문제) 직업이 MANAGER가 아닌 사람의 모든 정보를 출력하라.

SELECT *
FROM emp
WHERE job <> 'MANAGER';

6. 문제) 입사일이 81/04/02 이후에 입사한 사원의 정보를 출력하라.

alter session set nls_date_format = 'YYYY/MM/DD';
SELECT *
FROM emp
WHERE hiredate = '1981/04/02';

7. 문제) 급여가 $800 이상인 사람의 이름, 급여, 부서번호를 출력하라.

SELECT ename, sal, deptno
FROM emp
WHERE sal > = 800;

8. 문제) 부서번호가 20번 이상인 사원의 모든 정보를 출력하라.

SELECT * FROM emp WHERE deptno = 20;

9. 문제) 이름이 K로 시작하는 사람보다 높은 이름을 가진 사람의 모든 정보를 출력하라.

SELECT * FROM emp WHERE ename > ‘K’;

10. 문제) 입사일이 81/12/09 보다 먼저 입사한 사람들의 모든 정보를 출력하라.

ALTER SESSION SET nls_date_format = ‘YYYY/MM/DD’;
SELECT * FROM emp WHERE hiredate < ‘1981/12/09’;

11. 문제) 입사번호가 7698보다 작거나 같은 사람들의 입사번호와 이름을 출력하라.

SELECT empno, ename FROM emp WHERE empno <= 7698;

12. 문제) 입사일이 81/04/02 보다 늦고 82/12/09 보다 빠른 사원의 이름, 월급, 부서번호를 출력하라.

ALTER SESSION SET nls_date_format = ‘YYYY/MM/DD’;
SELECT ename, sal, deptno From EMP
WHERE hiredate > ‘1981/04/02’
and hiredate < ‘1982/12/09’;

13. 문제) 급여가 $1,600보다 크고 $3,000보다 작은 사람의 이름, 직업, 급여를 출력하라.

SELECT ename, job, sal FROM emp
WHERE sal > 1600 and sal < 3000;

14. 문제) 사원번호가 7654와 7782 사이 이외의 사원의 모든 정보를 출력하라.

SELECT * From emp WHERE empno > 7654 and empno < 7782;

15. 문제) 이름이 B와 J 사이의 모든 사원의 정보를 출력하라.

EMP 테이블의 ENAME 컬럼에 저장되어 있는 값의 유형을 잘
확인해 보신 후 다음과 같이 문장을 실행해 보십시오.

select ename from emp
where ename >= 'B%' and ename <= 'J_%'

ENAME이 B로 시작되는 값보다 크고 J로 시작되는 값보다 작은 값을
찾는 조건으로 검색해야 합니다.

16. 문제) 입사일이 81년 이외에 입사한 사람의 모든 정보를 출력하라.

이 예제의 경우에는 다음 장에서 소개되는 함수를 사용하는
경우입니다.
분명, 함수를 배우지 못했기 때문에 정답 처리를 지 못할 것
입니다. 예습에 대한 준비성을 보기 위한 예제입니다.

ALTER SESSION SET nls_date_format = ‘YYYY/MM/DD’;
SELECT * FROM emp WHERE substr(hiredate,1, 4) <> ‘1981’;

17. 문제) 직업이 MANAGER와 SALESMAN인 사람의 모든 정보를 출력하라.

SELECT * FROM emp
WHERE job =’MANAGER’or Job = ‘SALESMAN’;

18. 문제) 부서번호와 20, 30번을 제외한 모든 사람의 이름, 사원번호, 부서번호를 출력하라.

SELECT ename, empno, deptno FROM emp
WHERE deptno <> 20 AND deptno <> 30;

19. 문제) 이름이 S로 시작하는 사원의 사원번호, 이름, 입사일, 부서번호를 출력하라.

SELECT empno, ename, hiredate, deptno
FROM emp
WHERE substr(ename, 1, 1) = ‘S’;

20. 문제) 입사일이 81년도인 사람의 모든 정보를 출력하라

ALTER SESSION SET nls_date_format = ‘YYYY-MM-DD’;
SELECT * FROM emp WHERE substr(hiredate, 1, 4) = ‘1981’;

21. 문제) 이름 중 S자가 들어가 있는 사람만 모든 정보를 출력하라.

SELECT *
FROM emp
WHERE ename like ‘%S%’;


22. 문제) 이름이 S로 시작하고 마지막 글자가 T인 사람의 모든 정보를 출력하라(단, 이름은 전체 5자리이다)

SELECT * FROM emp WHERE ename like ‘S___T’;

23. 문제) 첫 번째 문자는 관계없고, 두 번째 문자가 A인 사람의 정보를 출력하라.

SELECT * FROM emp WHERE ename like ‘_A%’;

24. 문제) 커미션이 NULL인 사람의 정보를 출력하라.

SELECT * FROM emp WHERE comm Is null;

25. 문제) 커미션이 NULL이 아닌 사람의 모든 정보를 출력하라.

SELECT * FROM emp WHERE comm Is not null;

26. 문제) 부서가 30번 부서이고 급여가 $1,500 이상인 사람의 이름, 부서 ,월급을 출력하라.

SELECT ename, deptno, sal FROM emp
WHERE deptno = 30 and sal > 1500;

27. 문제) 이름의 첫 글자가 K로 시작하거나 부서번호가 30인 사람의 사원번호, 이름, 부서번호를 출력하라.

SELECT empno, ename, deptno FROM emp
WHERE ename like ‘K%’ or deptno = 30;

28. 문제) 급여가 $1,500 이상이고 부서번호가 30번인 사원 중 직업이 MANAGER인 사람의 정보를 출력하라

SELECT * FROM emp
WHERE sal > 1500 and deptno = 30 and job = ‘MANAGER’;

29. 문제) 부서번호가 30인 사람 중 사원번호 SORT하라.

SELECT * FROM emp WHERE deptno = 30 ORDER BY empno;

30. 문제) 급여가 많은 순으로 SORT하라.

SELECT * FROM emp ORDER BY sal DESC;

31. 문제) 부서번호로 ASCENDING SORT한 후 급여가 많은 사람 순으로 출력하라.

SELECT empno, ename, deptno, sal
FROM emp
ORDER BY deptno asc, sal;

32. 문제) 부서번호가 DESCENDING SORT하고, 이름 순으로 ASCENDING SORT,급여 순으로 DESCENDING SORT 하라.

SELECT empno, deptno, ename, sal
FROM emp
ORDER by deptno desc, ename asc, sal desc;



제 5장. 연습문제 해답(161-162페이지). 총 20문항

1. 문제) EMP Table에서 이름, 급여, 커미션 금액, 총액(sal + comm)을
         구하여 총액이 많은 순서로 출력하라. 단, 커미션이 NULL인
         사람은 제외한다.

SELECT ename, sal, comm, sal +comm Total
FROM emp
WHERE comm Is not null
ORDER BY total desc;

2. 문제) 10번 부서의 모든 사람들이게 급여의 13%를 보너스로 지불하기로
         하였다. 이름, 급여, 보너스 금액, 부서번호를 출력하라.

SELECT ename, sal, sal * 1.13, deptno
FROM emp
WHERE deptno = 10;

3. 문제) 30번 부서의 연봉을 계산하여 이름, 부서번호, 급여, 연봉을
         출력하라. 단, 연말에 급여의 150%를 보너스로 지급한다.

SELECT ename, deptno, sal, (sal*12)+(sal*1.5)
FROM emp
WHERE deptno = 30;

4. 문제 ) 부서번호가 20인 부서의 시간당 임금을 계산하여 출력하라.
          단, 1달의 근무일수는 12일이고, 1일 근무시간은 5시간이다.
          출력양식은 이름, 급여, 시간당 임금(소수이하 첫 번째 자리
          에서 반올림)을 출력하라

SELECT ename, sal, (sal/12)/5
FROM emp
WHERE deptno = 20;

5. 문제) 급여가 $1,500부터 $3,000 사이의 사람은 급여의 15%를 회비로
         지불하기로 하였다. 이를 이름, 급여, 회비(소수점 두 자리에서
         반올림)를 출력하라.

SELECT ename, sal, round(salx0.15, -2)
FROM emp
WHERE sal >= 1500 and sal <= 3000;

6. 문제) 급여가 $2,000 이상인 모든 사람은 급여의 15%를 경조비로 내기
         로 하였다. 이름, 급여, 커미션(소수점 이하 절삭)를 출력하라.

SELECT ename, sal, round(sal * 0.15, -2)
FROM emp
WHERE sal > 1500 and sal <= 3000;

7. 문제) 입사일부터 지금까지의 날짜수를 출력하라. 부서번호, 이름, 입사
         일, 현재일, 근무일수(소수점 이하 절삭), 근무년수, 근무월수
         (30일 기준), 근무주수를 출력하라.

SELECT ENAME, HIREDATE "입사일자" ,
SYSDATE "현재날짜" ,
FLOOR(MONTHS_BETWEEN(SYSDATE, HIREDATE)/12) "년",
FLOOR(MONTHS_BETWEEN(SYSDATE, HIREDATE)) "월",
FLOOR(MONTHS_BETWEEN(SYSDATE, HIREDATE)*7) "주",
TRUNC(SYSDATE-HIREDATE) "일"
FROM EMP;

그리고, 커미션 컬럼을 회비라는 의미로 컬럼 표현을 하시면 되겠습니다.

7. 161페이지 7번 해답

SELECT DEPTNO, ENAME,
HIREDATE, <-- 입사일자
SYSDATE, <-- 현재일자
TRUNC(SYSDATE-HIREDATE), <-- 근무일수
TRUNC(SYSDATE-HIREDATE) / 365, <-- 근무년수
TRUNC(SYSDATE-HIREDATE) / 30, <-- 근무월수
TRUNC(SYSDATE-HIREDATE) / 7 <-- 근무주수
FROM EMP;

8. 문제) 모든 사원의 실수령액을 계산하여 출력하라. 단, 급여가 많은
         순으로 이름, 급여, 실수령액을 출력하라.(실수령액은 금여에
         대해 10%의 세금을 뺀 금액)

SELECT ename, sal, (sal - (sal*0.10))
FROM emp
ORDER BY sal DESC;

9. 문제) 입사일로부터 90일이 지난 후의 사원이름, 입사일, 90일 후의
         날, 급여를 출력하라.

SELECT ENAME, HIREDATE, HIREDATE+90, SAL FROM EMP;

10. 문제) 입사일로부터 6개월이 지난 후의 입사일, 6개월 후의 날짜, 급여
          를 출력하라

SELECT ENAME, HIREDATE, ADD_MONTHS(HIREDATE, 6), SAL
FROM EMP;

11. 문제) 입사한 달의 근무일수를 계산하여 부서번호, 이름, 근무일수를
          출력하라.

SELECT DEPTNO, ENAME, LAST_DAY(HIREDATE) ? HIREDATE
FROM EMP;

12. 문제) 모든 사원의 60일이 지난 후의 ‘MONDAY’는 몇 년, 몇 월,
          몇 일 인가를 구하여 이름, 입사일,’MONDAY’를 출력하라

SELECT ENAME, HIREDATE, NEXT_DAY(HIREDATE+60, 'MONDAY')
FROM EMP;

13. 문제) 입사일로부터 오늘까지의 일수를 구하여 이름, 입사일, 근무일수
          를 출력하라.

SELECT ENAME, HIREDATE, (SYSDATE - HIREDATE) FROM EMP;

14. 문제) 입사일을 ‘1996년 5월 14일’의 형태로 이름, 입사일을 출력하라.

SELECT ENAME, TO_CHAR(HIREDATE, 'YYYY-MM-DD') FROM EMP;

15. 문제) 이름의 글자수가 6자 이상인 사람의 이름을 앞에서 3자만 구하여 소문자로 이름만을 출력하라.

SELECT lower(substr(ename, 1, 3))
FROM emp WHERE length(ename) = 6;

16. 문제) 10번 부서 월급의 평균, 최고, 최저, 인원수를 구하여 출력하라.

SELECT avg(sal), max(sal), min(sal), count(*)
FROM emp
WHERE deptno = 10;

17. 문제) 각 부서별 급여의 평균, 최고, 최저, 인언수를 구하여 출력하라.

SELECT avg(sal), max(sal), min(sal), count(*)
FROM emp
GROUP BY deptno;

18. 문제) 각 부서별 같은 업무를 하는 사람의 인원수를 구하여 부서번호,업무명, 인원수를 출력하라.

SELECT deptno, job, count(*)
FROM emp
GROUP BY deptno, job;

19. 문제) 같은 업무를 하는 사람의 수가 4명 이상인 업무와 인원수를 출력하라.

SELECT JOB, COUNT(*)
FROM EMP
GROUP BY JOB
HAVING COUNT(*) > 4;

20. 문제) 각 부서별 평균 월급, 전체 월급, 최고 월급, 최저 월급을 구하
          여 평균 월급이 많은 순으로 출력하라.

SELECT deptno, avg(sal), sum(sal), max(sal), min(sal)
FROM emp
GROUP BY deptno
ORDER BY avg(sal) DESC;


6장. 연습문제 해답(184-185페이지). 총 13문항

1. 문제) EMP와 DEPT Table을 JOIN하여 부서번호, 부서명, 이름, 급여를 출력하라.

SELECT a.deptno, b.dname, a.ename, a.sal
FROM emp a, dept b
WHERE a.deptno = b.deptno;

2. 문제) 이름이 ‘ALLEN’인 사원의 부서명을 출력하라.

SELECT b.dname
FROM emp a, dept b
WHERE a.deptno = b.deptno and a.ename = 'ALLEN';

3. 문제) DEPT Table에 있는 모든 부서를 출력하고, EMP Table에 있는 DATA
         와 JOIN하여 모든 사원의 이름, 부서번호, 부서명, 급여를 출력
         하라.

SELECT a.ename, a.deptno, b.dname, a.sal
FROM emp a, dept b
WHERE a.deptno = b.deptno;

4. 문제) EMP Table에 있는 EMPNO와 MGR을 이용하여 서로의 관계를 다음과
         같이 출력하라. ‘SMTH의 매니저는 FORD이다’

SELECT a.empno, a.ename, b.mgr
FROM emp a, emp b
WHERE a.empno = b.mgr and a.ename = 'FORD';

4. 184페이지 4번 해답

이 문제에서 요구했던 저의 의도는 하나의 테이블을 2개의 테이블로
조인하는 방법이었습니다. 이런 조인방법을 보통 "Self References
Join"이라고 합니다

SELECT b.ename||'의 매니저는 '||a.ename||'이다'
FROM emp a, emp b
WHERE a.empno = b.mgr;

하나의 emp 테이블을 from 절에 alias를 통해 2번 정의하여 조인하는
방법입니다

5. 문제) ‘ALLEN:의 직무와 같은 사람의 이름, 부서명, 급여, 직무를
출력하라.

SELECT a.ename, b.dname, a.sal, b.loc, a.job
FROM emp a, dept b
WHERE a.job = (select job from emp where ename =ALLEN’);

6. 문제) ‘JONES’가 속해있는 부서의 모든 사람의 사원번호, 이름, 입사
일, 급여를 출력하라.

SELECT empno, ename, hiredate, sal
FROM emp
WHERE deptno = (SELECT deptno
FROM emp WHERE ename =’JONES’);

7. 문제) 전체 사원의 평균 임금보다 많은 사원의 사원번호, 이름,
         부서명, 입사일, 지역, 급여를 출력하라.

SELECT a.empno, a.ename, a.hiredate, b.loc, a.sal
FROM emp a, dept b
WHERE a.sal > (select avg(sal) from emp);

8. 문제) 10번 부서 사람들 중에서 20번 부서의 사원과 같은 업무를 하는
         사원의 사원번호, 이름, 부서명, 입사일, 지역을 출력하라.

SELECT a.empno, a.ename, b.dname, a.hiredate, b.loc
FROM emp a, dept b
WHERE a.deptno = b.deptno and
a.job in (select job from emp where deptno = 20)
and a.deptno = 10;

9. 문제) 10번 부서 중에서 30번 부서에는 없는 업무를 하는 사원의
사원번호, 이름, 부서명, 입사일, 지역을 출력하라.

SELECT a.empno, a.ename, b.dname, a.hiredate, b.loc
FROM emp a, dept b
WHERE a.deptno = b.deptno and a.deptno = 10
and a.job not in (select job
from emp where deptno = 30);

10. 문제) 10번 부서와 같은 일을 하는 사원의 사원번호, 이름, 부서명,
지역, 급여를 급여가 많은 순으로 출력하라.

SELECT a.empno, a.ename, b.dname, b.loc, a.sal
FROM emp a, dept b
WHERE a.deptno = b.deptno
and a.job in (select job
from emp where deptno = 10)
ORDER BY a.sal;

11. 문제) ‘MARTIN’이나 ‘SCOTT의 급여와 같은 사원의 사원번호, 이름,급여를 출력하라.

SELECT a.empno, a.ename, a.sal
FROM emp a
WHERE a.ename IN ('MARTIN', 'SCOTT');

12. 문제) 급여가 30번 부서의 최고 급여보다 높은 사원의 사원번호, 이름, 급여를 출력하라.

SELECT empno, ename, sal
FROM emp
WHERE sal > (select max(sal) from emp where deptno = 30);

13. 문제) 급여가 30번 부서의 최저 급여보다 높은 사원의 사원번호,
이름, 급여를 출력하라.

SELECT empno, ename, sal
FROM emp
WHERE sal > (select min(sal) from emp where deptno = 30);


 

Posted by 창신다이

PL/SQL Day5

2008. 2. 22. 11:29

PL-SQL Day 5

<오라클 관련 문서>
http://tahiti.oracle.com/
(명령어관련)SQL, PL/SQL, and SQL*Plus syntax and examples.
(에러관련)Look up an error message

<트리거>
데이터무결성 보장 방법 3가지
1.Application을 통한 구현
2.제약조건
3.트리거 이용

용도: ①보안기능설정, ②데이터베이스 감시, ③데이터의 무결성, ④복사, ⑤연속적 작업 수행
분류: 트리거 발생 횟수에 따라 문장 레벨, 행 레벨 트리거로 분류
프로시저와의 차이점: EXECUTE 명령어로 실행하지 않고 트리거 생성 후 자동 실행
                     트리거 문장안에서 COMMIT, ROLLBACK 실행 안됨


PL-SQL -> 데이터베이스 조작
C/C++, JAVA -> GUI


Posted by 창신다이

PL/SQL Day4

2008. 2. 22. 11:29

PL-SQL Day 4

<PL-SQL >
SQL의 단점
(반복X, 비교X, 예외처리X, 변수선언X

①Interpreter-Language
i)syntax(문법) check -> ii)semantic(의미) check -> 실행 가능한 상태 -> iii)runner가 실행

②Compiler-Language
i)syntax(문법) check -> ii)semantic(의미) check -> object생성 -> iii)runner가 실행

<매개변수의 종류>
IN : 프로시저에 전달
OUT : 처리된 결과를 사용자에게 다시 전달
IN OUT : 둘다

Scalar 변수: 한번에 하나의 값만 저장
TYPE 변수: ①잘모를때 ⓢ테이블의 변경에 대비
ROWTYPE 변수: 테이블의 모든 컬럼
RECORD 변수: 구조체
COMPOSITE 변수:

<Cursor>
1. 암시적 커서 : 결과행이 1개
2. 명시적 커서 : 선언 -> OPEN(SYNTAX/SEMANTIC - CHECK, RUN) -> FETCH(OPEN한 커서의 실행결과를 읽어온다, 한번에 한행) -> CLOSE
속성: %ROWCOUNT, %FOUND, %NOTFOUND, %ISOPEN(현재 커서가 open 되어 있는지를 리턴)


5일차 일정
<예외처리방법>
~3시 수업(4지선다형, 20문제)
3시 시험


Posted by 창신다이

PL/SQL Day3

2008. 2. 22. 11:29

PL-SQL Day 3

<SQL언어>
DQL: SELECT
DML: INSERT, UPDATE, DELETE
TCL: COMMIT, ROLLBACK, SAVEPOINT
이상 ~ 8장

이하 9장 ~
DDL(Data Definition Language): CREATE[Auto Commit, 이전에 Commit, Rollback 되지 않은 DML을 Commit 시킨다]
DCL(Data Control Language): GRANT, REVOKE

<Table의 종류>
①User Table : 사용자가 만든 Table
ⓢData-Dictionary(Meta) Table : 
  i) USER_tables : 사용자가 테이블을 생성, 변경시 기록
  ii)
③Temporary Table :
④External Table :

*File-System :
파일리스트의 정보를 사람이 관리하므로 파일리스트와 파일의 불일치 발생으로 효과적인 관리X

<DELETE in DML vs TRUNCATE in DDL>
1. DELETE FROM 테이블명
2. TRUNCATE TABLE 테이블명

*TRUNCATE는 DDL이기때문에 Auto Commit을 동반한다
DELETE에 의한 삭제는 Data만 삭제되어 추가 할당된 공간은 그대로 있다, 따라서 최초 크기 보다 늘어난 공간으로 인해 검색시 성능저하가 우려됨
TRUNCATE는 최초 크기만 남겨두고 늘어난 공간은 반납
-> DELETE는 부분적인 삭제가 요구될때 사용하고, TRUNCATE는 전체적인 데이터 삭제시 이용한다

<DATA TYPE>
CHAR(CHARACTER) : 고정길이 datatype, ex)사원번호, 구분자
VARCHAR2 : 가변길이 datatype, (ANSI 표준에서 VARYING CHARACTER), ex)주소, 이름, 비고, 적요
NUMBER : 00000 ~ 99999의 정수, (ANSI 표준에서 decimal), ex) number(7, 2) 소수값. 전체 7자리 중에서 소숫점 이하 자리가 2자리
DATE, TIMESTAMP : 연월일 시간 제공에서는 같지만 포맷이 다르다
Interval Year to Month
         Month to Day
         Day to Time
         Time to Minute
         Minute to Second
Long Raw : Binary-Data, 특정 컬럼에 최대 2GB 까지 저장
Long : Varchar2(최대4000byte)와 동일, 그러나 Long은 최대 2GB 까지 저장
Long과 Long Raw는 하나의 테이블에 하나만 저장할 수 있다. 따라서 2GB이상을 저장할려면 테이블을 2개이상 만들어야함. V8부터 4GB 까지 저장할 수 있는 타입 나옴
BLOB(Binary Large Object)
CLOB(Char Large Object)
①4GB까지 저장
ⓢ하나의 Table에 여러개를 저장
③V8부터
-> DBMS_LOB 라는 패키지를 이용해서 Insert, Update, Delete를 한다

<ROWID 컬럼>
: LEVEL 사용시
18자리로 구성
XXXXXX(객체번호)-XXX-XXXXXX(블록주소)-XXX(저장될때 순번)

<CONSTRAINTS>
Data Integrity 보장 방법 3가지
Application을 통한 구현
트리거 이용
제약조건
     1. PK
     2. FK
     3. Unique
     4. CHECK
     5. NOT NULL

특징: - 하나의 컬럼에 여러 개의 제약 조건 설정 가능(column-level, table-level)
      - 여러 개의 칼럼으로 하나의 제약 조건 설정 가능

유형
1. COLUMN-LEVEL
- 하나의 컬럼에 제약 조건을 정의할 때
- CREATE, ALTER 문장으로 컬럼을 정의할 때 데이터 타입 뒤에 정의
- 5가지 유형의 제약 조건 모두 부여

2. TABLE-LEVEL
- 하나의 컬럼에 여러 개의 제약 조건을 부여할 때
- 여러 개의 컬럼에 제약 조건을 정의할 때
- ★★NOT NULL 제약 조건은 부여할 수 없다

종류
1. PRIMARY-KEY : 식별키는 하나의 테이블에 하나만 존재, 식별키는 정의하면 인덱스가 자동 생성
2. FOREIGN-KEY :
3. CHECK :
4. UNIQUE : 컬럼의 모든 값이 유일, NULL 입력 가능, INDEX 자동 생성, 하나의 테이블에 여러 개의 유일 키 생성
5. NOT NULL

타입과 Constraint 사이에 CONSTRAINT Contraint명이 들어간다
CONSTRAINT SYS_1001 <- 안 쓰면 디폴트로 들어간다

<External 테이블>
데이터베이스는 구조만 있고 데이터는 OS상의 파일에 있다
1. 가상 디렉토리 생성

http://www.oracle.com/oradata/index.html
oradata : Virtual Directory

용도: OS상에 있는 데이터를 데이터베이스에 업로드

<Temporary Table>
일시적 테이블 저장

ON COMMIT DELETE ROWS; -> commit이 되는 시점
ON COMMIT PRESERVE ROWS; -> 세션이 종료되는 시점

<Index>
인덱스방법:
①Full-Table-Scan
②Index-Scan

Index Type ┌
                └ physical : B*tree-index, Reserve-idnex, Descending-Index, Binary-Index

<View>
정의:가상의 table
용도:자주 사용되는 join 문장들을 쉽게 사용할 수 있도록 한다
문법:CREATE [OR REPLACE] VIEW VIEW_EMP AS [JOIN 문장]
종류:
①normal-view
②inline-view
③materialized-view
특징:물리적 저장 공간X(데이터 X), 캡슐기능(보안),
기타:때에 따라서 입력, 수정, 삭제 가능

<Materialized-View>
View: 가상의 테이블 - 데이터를 가지고 있지 않다
정의: 데이터를 가지고 있다 but SELECT만 할 수 있고, INSERT, UPDATE, DELETE는 서버에서만 할 수 있다(서버가 refresh한다)
용도: 주문

Build immediate refresh FAST
Enable query rewrite

complete -> drop 하고 다시 집계,
fast(=force) -> 관련된 데이터만 갱신

start with sysdate + 1/24  -> 한시간에 한번씩 commit 한다
                               1    -> 하루에 한번씩 commit 한다


이기능 사용 가능 확인
CONNECT /AS SYSDBA
SELECT * FROM V$OPTION;

<SEQUENCE>
연속적인 번호 부여(ex.접속관리)

<SYNONYM>
용도: 1. 또 다른 이름으로 밖에 사용할 수 없는 경우
      2. 긴 이름을 짧은 이름으로
문법: CREATE [PUBLIC] SYNONYM [SYNONYM명] FOR [사용자명].[테이블명]

*DB에서 사용자 계정
1. 인증
2. 객체의 이름 결정
3. 백업과 복구 단위 결정

업무별로 생성
(사용용이, B & R용이, OLTP성 환경)

전체업무를 하나의 사용자로 생성
(분산DB, DW환경[통계])

문법: CREATE USER haksa               [아이디생성]
      IDENTIFIED BY haksa123          [비밀번호생성]
      GRANT create session TO haksa;  [세션생성권한부여]
      GRANT create table TO haksa;    [테이블생성권한부여]
      ALTER USER haksa
      IDENTIFIED

<권한>
┌ System 권한 : DB에 대한
└ Object 권한 : 특정 객체에 대한

*** Data Dictionary 중요함

Posted by 창신다이

PL/SQL Day2

2008. 2. 22. 11:28

PL-SQL Day 2

<변환함수>
*용도1. 값변환
WHERE hiredate = '81-02-03'
hiredate는 DATE 타입이고 '81-02-03'은 char 타입이다. 서버에서 내부적으로 변환하는 작업이 일어난다
to_date('81-02-03') -> char 타입을 date타입으로 변환

*용도2. 포맷변환(ex. 날짜시간출력)
SYSDATE "년/원/일"
SYSTIMESTMP "년/원/일 시:분:초.밀리세컨드 +GMT" - 9i부터제공
ex.)SELECT TO_CHAR(SYSDATE, 'YY-MM-DD HH:MM') FROM DUAL;

** 날짜 format 변경 방법
① Statement-Level : TO_CHAR() 함수를 이용해서 문장에서 바로 바꾼다
② Session-Level
③ Instance(Server, 데이터베이스 전체)-Level

<숫자형식요소>
99,999 -> _1,234 : 해당 되는 자릿수에 값이 없으면 표시안함
00,000 -> 01,234 : 해당 되는 자릿수에 값이 없으면 0으로 채운다
ex)TO_CHAR(12506, '$9099,999')

<복수 행 함수>
복수 행 함수 사용시 사용하는 문법
GROUP BY
HAVING

<가상컬럼>
: 서버에 의해서 제공되는 칼럼
Level - 조직도를 만들어준다, 사용예:
Rowid
Rownum

<JOIN>
:WHERE절에 공통으로 적용되는 기준이 필요함
- 8i                                                                      
ORACLE에 국한된 문법 기반,
CRTESIAN-JOIN(WHERE절 생략),
EQUI-JOIN[INNER-JOIN, EQUI->EQUAL](WHERE 절에서 결합 기준에 따라 결합),
SelfReference-JOIN(자기가 자기를 참조하는 데이터 모델. 즉,같은 필드명을 두번이상 못 쓰는것에 대한 솔루션)
OUTER-JOIN

- 9i
ANSI 표준 문법 기반,      
CROSS-JOIN,
NATUAL-JOIN,
SelfReference-JOIN
Left-OUTER-JOIN
Right-OUTER-JOIN
Full-OUTER-JOIN

<서브쿼리>
:내가 검색하고자 하는 값을 모를때

*SQL언어
DQL: SELECT
DML: INSERT, UPDATE, DELETE
TCL: COMMIT, ROLLBACK, SAVEPOINT
DDL(Data Definition Language): CREATE, Auto Commit, 이전에 Commit, Rollback 되지 않은 DML을 Commit 시킨다
DCL:

<LOCK>
A
UPDATE emp
SET ~~
WHERE id = 10;

B
UPDATE emp
SET ~~
WHERE id = 10;

LOCK현상 : A가 진행중일 떄 B를 실행하면, A에게 우선권을 부여하여 B는 waiting함으로써 데이터를 공유한다.

①Row-Level Lock :
UPDATE, INSERT, DELETE Statement가 WHERE절이 있는 경우 조건을 만족하는 경우에만 Lock이 걸린다
SELECT * FOR UPDATE -> 조회지만 Lock이 발생. UPDATE 예정을 표시(ex. 좌석예매)
②Table-Level Lock :
i)UPDATE, INSERT, DELETE Statement에서 WHERE절이 없는 경우
ii)LOCK TABLE EMP IN EXCLUSIVE MODE; (ex. 인사급여관리)
        

Posted by 창신다이

PL/SQL Day1

2008. 2. 22. 11:18

PL-SQL Day 1

※학습절차
1. SQL & PL-SQL(35H↑) : RDBMS, SQL, PL-SQL
->DB조작언어, 사용자 인터페이스x
▶다음과정
<중급>
2. Fundamentals[Administration]-I(35H) : RDBMS 관리기법
3. Fundamentals-II : Backup & Recovery
  ◎성능저하 요인 2가지
    ①잘못된 Query -> SQL 튜닝
    ②DB구조 -> 서버튜닝
4. Performance Tuning(35H) : 서버튜닝
4-2. 기타과정(SQL-Statement tuning) : SQL 튜닝
5. Data Modeling(Analysis, Design)
<고급>
6. 대용량  DB 솔루션 : 성능
7. Data Architecture

<월-수>
01 - 02 : Oracle
03 - 11 : SQL
<목-금>
12 - 15 : PL-SQL

DBMS : File System의 한계 극복
①공유x
②공간낭비(공유에 대한 문제 해결을 위해 같은 데이터를 여러곳에 복사)
③불필요한 Operation 발생(데이터 동기화를 위해)
④무결성 보장x - 원하지 않는 데이터 저장x

DBMS ┌ DB2(IBM)   ─ 최초 개발
          ├ Sybase       ┐ Sybase 개발 엔지니어들이 SQL-Server 개발했음.
          ├ SQL-Server ┘ 구조 거의 똑같음
          ├ Oracle       ─ 두번째로 나옴. DB2를 참조함
          ├ Infomix
          └ AdaBas

SQL : 데이터를 Access 하기 위해 데이터베이스와 통신하는 언어
그래픽한 화면 디자인x

V6 V7 V8 V8i V9i V10g
SQL*PLUS Tool - for Developer, 9i부터 svrmgrl과 통합하여 이름 변경 SQL*PLUS(TCP-IP),
추가로 isqlplus(HTTP),
추가로 isqlplus를 위해서 Apache 웹서버
sqldba(old) - for DataBase Administrator, v8i부터 svrmgrl(Server*Manager)

기본계정
sys - 데이터베이스를 설치한 계정. OS의 Administrator와 유사한 역할
system - DB 관리자 계정
scott(Scott Andrew) - OS의 guest와 유사한 역할
hr -

scott 계정 생성
start C:\oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN\scott.sql

<file-system>
file > record(line) > field

<RDBMS>
table(entity) > Row(tuple) > Column(Attribue) [p.28 참조]
설계단계에서 사용 / (분석단계에서 사용)

<관계형데이터베이스란?>
목표: 중복제거, 똑같은 데이터가 반복된다면 File System과 같다. 예를들어 emp table의 부서명이 반복되는 것도 중복이다.

SQL*PLUS┌① 명령어prompt (Dos, Unix, Linux)
               └② Client-WIndows용 [for client 프로그램 설치]
             (SQL*PLUS-Tool[win, prompt], SQL*NET[Server, Client간(2-tier) 연결 통신 프로그램])

<Oracle 분류>
①Enterprise_Edition : 중소규모 이상 대규모 ┐         ┌ 추가옵션 o(JServer[JVM]:Java Class 저장)
②Standard_Edition : 중소그룹용(10~50명),  ┤DBMS├ 추가옵션 x
③Personal_Edition : 개인용,                     ┘ (기본)└ Network 기능 x
④Express_Edition : (licesce 필요 x)

<학습목표>
- RDBMS 개념
- RDBMS를 구현하기 위한 문법

PL-SQL : Procedural Language

DQL(Data Query Language)
SELECT [distinct]|[all] 성명 as sabun, 주소 "address" 'distinct : 중복되는 값 제거, alias 할때 대,소문자 섞어서 쓸때 더블인용부호 사용
FROM emp ORDER BY [colum1], [column2], ...[ASC/DESC]; 'ASC(오름차순:default), DESC(내림차순)

null(표현되어 있지 않은 컬럼, space를 의미하는 것이 아니라 null로 명시적으로 표현, 가장 큰 값으로 표현됨), not null

DDL(Data Definition Language)
alter table emp
 rename column A to B  '컬럼명을 테이블 스키마에서 바꾸는 것. cf) Alias는 임시로 바꿈

<가공컬럼>
:실제 테이블에는 존재하지 않는데 사용자의 필요에 의해서 컬럼을 산술식(우선순위 주의)을 표현해서 만들어내는 가짜 컬럼.
ex) SELECT empno, sal, comm, sal + comm FROM emp;

<컬럼 data-유형(type)>
┌char     ┐
└varchar ┘ : 문자형
number : 숫자형
date : 날짜형
type에 따라 연산자 사용 방식이 다르다. 문자형, 날짜타입에는 single 인용부호 사용.
날짜 타입은 Format 포맷이 맞아야 된다
날짜 포맷 확인 쿼리
 1  select value
 2  from NLS_SESSION_PARAMETERS
 3  where parameter = 'NLS_DATE_FORMAT';
RR 타입 -> 00 ~ 50 : 2000년대로 인식, 51 ~ 99 : 1900년대로 인식
YY 타입 -> 00 ~ 50 : 1900년대로 인식

SELECT TO_CHAR(sysdate, 'DY') FROM DUAL;

오늘날짜 확인
select sysdate from dual;

날짜포맷 변경
alter session set NLS_DATE_FORMAT = 'YYYY/MM/DD';
※세션레벨(이 sql 프로세스)에서만 적용 cf)서버(인스턴스)레벨 -> 관리자로 들어가서 모든 프로세스에 적용하도록 변경 가능

C:\oraclexe\app\oracle\product\10.2.0\server\sqlplus\admin\glogin.sql 제일 하단부에 alter session set

NLS_DATE_FORMAT = 'YYYY/MM/DD'; 추가하면 매번 접속시 마다 세션을 변경 시킨다

IN 연산자
WHERE depno IN(10, 20, 30)
-> WHERE depno = 10 or depno = 20 or depno = 30
-> WHERE depno = 10
   UNION
   WHERE depno = 20
   UNION
   WHERE depno = 30

LIKE 연산자
where ename like '주%' -> '%' 와일드카드문자
where ename like '주_' -> '_' 임의의 한 문자

인용부호 안에 있는 문자열 중에 ESCAPE 문자 뒤에 오는 문자는 문자로 취급한다. 임의의 한 문자를 가르키는 '_'와 구분

BETWEEN 연산자
where deptno BETWEEN 10 AND 20;
-> where deptno >= 20 and deptno <= 30;

※ IN과 BETWEEN 지양할 것 -> 어차피 번역되어서 실행되므로 효과가 덜하다

문자열 결합
ename || '의 1년 연봉은' ||sal||'입니다'
-> ename의 1년 연봉은 sal 입니다

PL-SQL의 DBMS_SMTP, DBMS_MAIL을 이용해서 E-mail을 보낼 수 있다.
이때 문자열 결합을 이용하게 된다.


UNION 연산자
: 중복된 정보는 한번만 보여줌
 
SQL 표준화 방법
①SQL문법은 대문자
②각절은 라인의 처음부터 작성
ex)SELECT no, name
FROM emp
WHERE deptno = 10
ORDER BY no;

<download>
1. spool 명령어 -> 로그내용 남길때도 이용
2. util_file 패키지
   (PL-SQL)
3. APP-S/W

<upload>
1. sql*load_utility (In Fundamental I)
2. external_table
3. util_file 패키지
4. APP-S/W

<함수=function=>sub_routine, sub_program>

*시간 가져오는 것
SELECT SYSTIMESTAMP FROM DUAL;
SYSTIMESTAMP는 SQL과 같이 사용되어진다.
FROM 뒤에는 반드시 테이블명을 써야 하는데, 실제 테이블명 사용할 수 없으므로 껍데기(더미테이블)를 제공한 것

Posted by 창신다이
Posted by 창신다이

메세지 후킹 절차
1. SetWindowsHookEx의 hInst와 dwThreadId를 이용해서 어느 응용 프로그램에 대해서 후킹할 지를 정하고 Callbak 함수인 lpfn 등록한다.

2. 후킹이 된 메세지에 대해 등록된 콜백 함수가 수행되며, lpfn 내에서 원하는 작업을 한 후에 다른 프로세스/쓰레드에서의 처리를 위하여 CallNextHookEx로 메세지 전달

3. 후킹을 완료하였으면 UnhookWindowsHookEx 함수를 이용해서 등록 해제

Posted by 창신다이

개발자의 요건.

2008. 2. 20. 15:54

열정적이고 행복하다,
여러 방면에 걸쳐 균형이 잡혀있다(well rounded),
학습이 빠르다,
글을 괜찮게 쓴다(커뮤니케이션에 대한 것),
믿음직하다.

그리고는 다음 장에서 배경이 적색으로 바뀌면서 인상 깊은 문구가 드러난다.

"I'll take someone happy and average over a guru who is disgruntled and frustrated."
"나는 뚱하고 불만스러운 고수보다는 행복하고 평균적인 실력을 가진 사람을 뽑겠다."
 

Posted by 창신다이
① [도구]→[인터넷 옵션]→[임시 인터넷 파일]→[설정]→[개체 보기]
② 마우스 오른쪽 버튼으로 삭제할 ActiveX 컨트롤 클릭 → [제거] 선택
③ [주의] 시스템에서 삭제되므로 신중히 선택해야 합니다.
Posted by 창신다이
Posted by 창신다이

SCWCD

2008. 2. 20. 15:49

SCWCD(SUN Certified Web Component Development) 웹 컴포넌트 개발자
SCBCD(SUN Certified Business Component Development) 비즈니스 컴포넌트 개발자

(43/65 62% 합격) $150


URL(Uniform Resource Locatiors)

- 지시자(Directive)

사용법
<% @ 지시자 %>

사용예
<%@ include file="include_box_end.jsp" %>

스크립틀릿
표현식

+ 선언문 <%! %> : 서블릿의 멤버 선언

scripting-invalid : jsp에 자바 코딩 못하도록 막는다
사용할 수 있는 유일한 방법 DD(Deployment Descriptor)에
<scripting-invalid>
 true
</scripting-invalid>

- EL(Expression Language)
<el-ignored>
 true
</el-ignored>
${user.name}

<%@ page isELIgnored="true" %>
페이지 지시자는 DD보다 우선해서 적용

- 액션
<jsp:getProperty name="user" property="addr" />

트레이드-오프


Posted by 창신다이

Platform SDK 란
VS는 OS를 제어 하기 위한 기본적인 api만 제공한다. OS의 버젼이 변경되어 VS를 출시이후 만들어진 api는 제공되지 않는다 이러한 api를 사용하기 위해서는Platform SDK를 설치 해야 한다. Microsoft에서는 매번 새로운 OS또는 패치가 이루어 졌을때 상황에 따라서해당 부분을 개발자가 지원 할 수 있도록 library를 제공하는데 이게 Platform SDK이다.

Visual Studio 6.0의 경우 February 2003 SDK가 지원 가능한 버젼이다.(공식적으로는)

다운로드
http://www.microsoft.com/download 에서 platform sdk라고 입력 하면 검색된다.

February 2003 SDK는 아래의 주소로 접속해서 받으면된다.
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm

Posted by 창신다이
SQLConfigDataSource
Posted by 창신다이

1. ocx파일 및 기타 필요한 파일을 포함하여 설치하는 cabinet(CAB) 파일을 만든다.
VB의 경우 배포마법사라는 툴로 포함 되어 있음.
그 외에는 MS에서 제공하는 cab 제작 툴로 만들어야 함.

2. html에서 OCX를 object로 사용하고 COSEBASE 옵션에 CAB 파일이 어디에 있는지 경로를 정해주면 사용자의 pc에 설치 되어 있지 않으면 자동 설치됨.
VB의 배포마법사를 사용하여 만들면 Sample html 파일도 생성됨.

3. 만약 인터엣 상에서 사용할 경우는 보안떄문에 캐비넷 파일이 인증을 포함해야 하는데 인증기관에 돈을 내야함.
MS에서 제공하는 테스트 인증툴을 사용하면 약간의 불편함은 있지만 사용가능함.

** OCX 배포를 위한 CAB 만들기
①캐비닛파일 만들기
> sdk\cabarc -s 6144 n NhisUrl.cab NhisUrl.ocx NhisUrl.inf

②디지털 서명 보증서 만들기
1. 보증 확인 과정을 제어하는 레지스트리 키 설정
> sdk\SETREG 1 TRUE

2. 테스트용 x.509 보증서 생성
> sdk\MAKECERT -n "CN=홍길동" -sv pvkNhis.pvk cerNhis.cer
* test.pvk라는 개인키(private key)파일과 cer(회사보증서) 파일 생성됨. 이때 대화상자로 암호 입력함.

3. 테스트 보증서에서 테스트용 SPC(Software Publisher Ceritificate) 생성
> sdk\CERT2SPC cerNhis.cer spcNhis.spc

③CAB 파일에 디지털 서명 보증서 추가하기
> sdk\SIGNCODE -spc spcNhis.spc -v pvkNhis.pvk -n "프로그램명" NhisUrl.cab

* CAB파일에 보증서가 붙게 되며, 보증서는 CAB이 아니라 OCX나 DLL파일에 붙일수도 있다.

Posted by 창신다이
552-1750(8930)
Posted by 창신다이
한국IBM
액센츄어
AT커니
딜로이트
베어링포인트
Posted by 창신다이
C++에서의 몇 가지 의문 사항에 대한 정리
http://anyflow.net/category/프로그래밍%20노트/plfm.neutral
Posted by 창신다이

BLOG main image
오랫동안 꿈을 그리는 사람은 마침내 그 꿈을 닮아 간다. -앙드레 말로- by 창신다이

공지사항

카테고리

분류 전체보기 (248)
공장이야기 (115)
Education (30)
회사이야기 (19)
일상 (73)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :