데이터베이스 2017. 1. 24. 02:11


PL SQL 작성 시 동적으로 DDL구문  또는 SELECT/INSERT/UPDATE/DELETE 구문을 수행해야 할 때가 있다.

이때 유용하게 사용하는 것이 EXECUTE IMMEDIATE 문법이다.


SCOTT 계정의 테이블들의 건수를 TBL_CNT_LIST라는 테이블에 INSERT하는 예시로 EXECUTE IMMEDIATE 구문을 이해해보자!


1. SCOTT 계정으로 생성된 테이블들의 레코드 건수 정보를 INSERT할 TBL_CNT_LIST 테이블 생성


1
2
3
4
CREATE TABLE TBL_CNT_LIST(
TBL_NM      VARCHAR2(30),
CNT         NUMBER(10)
);
cs

2. SCOTT계정의 테이블 목록으로 동적쿼리를 생성
   - 예시가 심플하여 PL SQL에 짧지만 DDL 및 DML 구문을 활용하여 복잡한 업무를 처리할 수 있다. 
   - 필요하다면 위의 TBL_CNT_LIST 테이블도 PL SQL 구문안에서 처리할 수 도 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DECLARE
BEGIN
    -- 테이블 건수 정보 테이블의 데이터 삭제
    DELETE FROM TBL_CNT_LIST;
    FOR X IN ( -- SCOTT 계정의 테이블 목록을 활용하여 INSERT 구문을 동적으로 생성한다.
                SELECT 'INSERT INTO TBL_CNT_LIST SELECT ' || CHR(39|| T.TABLE_NAME || CHR(39|| ' AS TBL_NM, COUNT(*) AS CNT FROM ' || T.TABLE_NAME AS INS_SQL
                  FROM USER_TABLES T
                 WHERE 1=1
    )
    LOOP
        -- EXECUTE IMMEDIATE 구문을 사용하여 INSERT 구문 수행
        EXECUTE IMMEDIATE X.INS_SQL;
    END LOOP;
    COMMIT;
END;
/
cs

3. 결과 보기

1
2
3
SELECT *
  FROM TBL_CNT_LIST T
 ORDER BY T.TBL_NM
cs




'데이터베이스' 카테고리의 다른 글

오라클 권한 조회  (0) 2017.06.28
오라클 계정과 권한  (0) 2017.06.23
오라클 TABLESPACE와 DATAFILE  (0) 2017.06.16
TIMESTAMP 연산  (0) 2017.05.11
오라클 - PIVOT과 UNPIVOT  (0) 2017.02.02
posted by 생각퍼즐
:
Useful/web Site 2017. 1. 20. 16:30


블로그에 프로그래밍 언어(JAVA, HTML 등)를 넣으면 일반 텍스트로 인식이 되어 아래의 소스코드 처럼 가독성이 떨어지죠!


public void initVariables(){

firstPageLabel    = "<a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \" class=\"btn\"><img src=\"" + servletContext.getContextPath() +  "/resources/img/page/btn_page_first.gif\" alt=\"처음\"   border=\"0\"/></a>&#160;";

        previousPageLabel = "<a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \" class=\"prev btn\"><img src=\"" + servletContext.getContextPath() +  "/resources/img/page/btn_page_prev.gif\"    alt=\"이전\"   border=\"0\"/></a>&#160;";

}


이런 문제를 해결하기 위한 좋은 사이트가 있어, 소개해봅니다~~


Color Scripter 사이트로 이동

회원가입 및 로그인 이런거 없습니다~ 그냥 바로 사용하시면 됩니다.(주인장 서비스 마인드 좋네~~~)


1. [그림1]의 상단왼쪽에서 언어를 선택합니다. 저 같은 경우 JAVA로 한 번 해보았어요~


[그림1]


2. 이제 [그림2]처럼 블로그에 넣을 소스코드를 붙여넣기 합니다.

   짜~잔! 이클립스 등 IDE 화면에서 보는것 처럼 예쁘게 보이죠^^  붙여넣기 후 편집도 가능합니다.


[그림2]


3. 스타일도 한 번 바꿔 볼까요

   아래의 [그림3]의 스타일패키지를 클릭하면 3가지 스타일 중에서 선택할 수 있어요!

   저는 제일 화려해 보이는 "서브라임 블랙"을 선택했어요~

   세부설정에서 글꼴, 줄간격 등을 조정할 수도 있어요(그냥 기본설정으로 써도 괜찮네요^^)

[그림3]


4. 자신의 블로그로 예쁘게 작성된 소스코드를 가져오는 방법은 [그림4]의 오른쪽 하단에 있는 "클립보드에 복사" 버튼을 꾸~욱 눌러주세요!

   



[그림4]


5. 그리고 자신의 블로그에 붙여넣기 하면 끝~ 간단하죠!

이제 블로그에 소스코드를 넣게위해 고생하지 마시고 Color Scripter를 사용하세요!!!


posted by 생각퍼즐
:
아키텍처 2017. 1. 18. 01:20

Application Layer 집중탐구


주요구성 요소

  • Web Server : 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 정적 웹 페이지를 반환하는 SW/HW를 총칭

  • WAS(Web Application Server) : Java EE 명세를 만족하는 JAVA 구현체로 크게 두 가지로 구분할 수 있다. Java EE 명세를 대부분 지원하고, 다양한 형태의 모듈로 배포가 가능한 고가의 WAS와 웹 모듈의 배포만 가능한 경량 WAS 또는 서블릿/JSP 컨테이너다. 경량 WAS의 대표적인 예로 Tomcat이 있다.


※ Java EE 주요 명세(Specification)를 잠깐 보고 넘어가자!

  • Servlet : HTTP를 사용해 JAVA로 웹 서비스를 제공하기 위한 표준

  • JSP(Java Server Pages): JAVA 코드에 HTML 태그를 삽입하는 Servlet 방식의 문제점을 개선하기 위해 HTML태그에 Java 코드를 삽입할 수 있는 표준으로 JSP가 처음 실행될 때 Servlet/JSP 컨테이너가 JSP를 Servlet으로 컴파일시켜서 내부적으로는 Servlet으로 동작합니다

  • EJB(Enterprise Java Beans) : Java에서 제공하는 분산 컴포넌트 기술로 비즈니스 로직이나 데이터, 메시지를 처리할 수 있습니다

  • Remote Method Invocation(RMI): 프록시를 써서 원격에 있는 Java 객체의 메소드를 실행시키기 위한기술입니다

  • Java Naming Directory Interface (JNDI): 자바 기술로 만들어진 객체에 이름을 붙여 찾을 수 있도록 단일한인터페이스를 제공

  • Java Database Connector(JDBC): 여러 종류의 데이터베이스 시스템에 접근하는 단일한 인터페이스를 제공합니다. 각각의 데이터베이스에 맞는 JDBC 드라이버가 있어야 합니다

  • Java Connector Architecture(JCA): 이기종 플랫폼을 통합할 수 있도록 플랫폼 독립적인 인터페이스를 제공합니다

  • Java Message Service (JMS): 여러 가지 메시징 시스템에 대한 플랫폼 독립적인 인터페이스를 제공합니다


경량 WAS의 핵심 기술 서블릿과 서블릿 컨테이너

▶ Servlet(서블릿)

  • JAVA로 웹 서비스를 구현하기 위한 SUN사의 표준 스펙

  • 독립적으로 실행되지 않으므로 main 메소드가 존재하지 않는다

  • 서블릿 컨테이너에 의해 생성(init), 호출(service), 소멸(destory) 즉, 서블릿 컨테이너가 서블릿의 상태를 변경하면서 서블릿 인터페이스에 정의된 각 메소드를 호출

▶ 서블릿 컨테이너

  • Client의  HTTP 요청을 받고 분석하여 Servlet을 실행시키는 역할을 수행

  • 네트워크 통신, 서블릿의 생명주기 관리, 스레드 기반의 병렬처리



웹 애플리케이션과 배치(Deployment)


웹 애플리케이션

일반적으로 WEB-INF 디렉토리를 가지며, 최상위 디렉토리는 해당 웹 컨텍스트의 최상위 문서 루트가 되고, WEB-INF 디렉토리 아래 web.xml에 서블릿 설정 파일이 존재하며, 독립적인 클래스 로더를 공유하는 웹 프로그램의 모임


배치(Deployment)

위에서도 설명했지만 배치(Deploy)는 웹 애플리케이션을 서블릿 컨테이너가 인식할 수 있도록 컨테이너 내부로 끌어들이는 과정을 말한다.


위에서 배운 지식을 활용하여 HTTP요청이 Servlet에 전달되는 과정을 보면


▶ Servlet 상속구조 관점에서 HTTP 요청 처리과정


[그림1]


Client 호출 URL 분석

① 서버와 통신을 위한 Protocol 선언(http, https, ftp )

HOST 정보(목적지 IP주소(도메인))

N/W 서비스나 특정 프로세스 식별을 위한 논리 단위

④ 컨텍스트명(서블릿 컨테이너에 배치된 웹 애플리케이션명)

⑤ 서블릿 매핑 URL

⑥ 쿼리 스트링(Client가 입력 또는 선택한 정보)


Servlet 상속구조 관점에서 HTTP 요청 처리과정

① 서블릿 컨테이너는 먼저 Client의 HTTP 요청 URL을 해석하여/testServlet이란 컨텍스명으로 매핑된 웹 애플리케이션을 찾습니다그리고 Servlet에게 넘겨줄 HttpServletRequestHttpServletResponse 객체를 생성합니다.

② 웹 애플리케이션 하위 디렉토리의 WEB-INF/web.xml을 참조하여 url-patter에 일치하는 servlet-name servlet-clas 찾습니다.

 서블릿 관리자에게 해당 서블릿 클래스명을 넘겨주면 서블릿 관리자는 해당 서블릿의 인스턴스를 캐시에서 찾아

service(ServletRequestServeltResponse) 메서드를 호출한다캐시에서 없을 경우 인스턴스를 생성하고 캐시에 저장


web.xml

1
2
3
4
5
6
7
8
9
10
web.xml 파일의 서블릿 설정 부분
<servlet>
   <servlet-name>myServlet</servlet-name>
   <servlet-class>MyServlet</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>myServlet</servlet-name>
   <url-pattern>myServlet.do</url-pattern>
</servlet-mapping>
 

c


▶ 웹 애플리케이션 구조 관점에서 HTTP 요청 처리과정


[그림2]


'아키텍처' 카테고리의 다른 글

소프트웨어 아키텍처 평가기법  (0) 2017.04.14
웹 환경의 이해(1/2)  (0) 2017.01.18
posted by 생각퍼즐
: