2013년 8월 27일 화요일

[oraclejava,javaoracle교육강좌강의,오라클자바실무개발잘하는학원,오라클강좌자바강좌강의]오라클 DBMS_EPG - Embedded PL/SQL Gateway(10gR2)

[oraclejava,javaoracle교육강좌강의,오라클자바실무개발잘하는학원,오라클강좌자바강좌강의]

오라클자바커뮤니티에서 설립한  개발자실무교육6년차 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클, SQL, 튜닝, 자바, 스프링, Ajax, jQuery, 안드로이드, 아이폰, 닷넷, C#, ASP.Net)   www.onjprogramming.co.kr 


오라클 9i Release2 이후 Oracle Server에는 Apache HTTP server에 embedded HTTP server가 포함되었는데
Oracle 10g Release 2에서는 mod_plsql을 통해 PL/SQL application을 실행하기 위해 embedded PL/SQL gateway
사용할 수 있게 되었습니다.

아래의 예를 참고하세요~

---------------------------------
1. CONN sys/password AS SYSDBA
---------------------------------


-----------------------------------------------------------------------------------------------------
2. SCOTT 계정이 만들어져 있지 않은 경우에만 실행 하세요~
-----------------------------------------------------------------------------------------------------

@$ORACLE_HOME/rdbms/admin/utlsampl.sql
ALTER USER scott IDENTIFIED BY tiger ACCOUNT UNLOCK;


-----------------------------------------------------------------------------------------------------
3. DAO(DataBase Access Descriptor)를 만들기 위해 create_dad를 실행
-----------------------------------------------------------------------------------------------------

BEGIN
  DBMS_EPG.create_dad (
    dad_name => 'my_epg_dad',
    path    => '/my_epg_dad/*');
END;
/

-----------------------------------------------------------------------------------------------------
4. 현재 설정된 매핑은 get_all_dad_mappings procedure를 통해 확인 가능 합니다.
-----------------------------------------------------------------------------------------------------

SET SERVEROUTPUT ON SIZE UNLIMITED
DECLARE
  l_paths  DBMS_EPG.varchar2_table;
BEGIN
  DBMS_EPG.get_all_dad_mappings (
    dad_name => 'my_epg_dad',
    paths    => l_paths);

  DBMS_OUTPUT.put_line('Mappings');
  DBMS_OUTPUT.put_line('========');
  FOR i IN 1 .. l_paths.count LOOP
    DBMS_OUTPUT.put_line(l_paths(i));
  END LOOP;
END;
/

Mappings
========
/my_epg_dad/*

PL/SQL procedure successfully completed.

-----------------------------------------------------------------------------------------------------
5. UNMAP_DAD and MAP_DAD를 통해 존재하는 DAD에 대해 Alter가 가능 합니다.
-----------------------------------------------------------------------------------------------------

BEGIN
  DBMS_EPG.unmap_dad (
    dad_name => 'my_epg_dad',
    path    => '/my_epg_dad/*');

  DBMS_EPG.map_dad (
    dad_name => 'my_epg_dad',
    path    => '/my_epg_dad/*');
END;
/

-----------------------------------------------------------------------------------------------------
6. SET_DAD_ATTRIBUTE procedure를 통해 attribute를 set 하는데 아래는 DAD의 DB UserName과
  default page를 set 하는겁니다.
-----------------------------------------------------------------------------------------------------

BEGIN
  DBMS_EPG.set_dad_attribute (
    dad_name  => 'my_epg_dad',
    attr_name  => 'database-username',
    attr_value => 'SCOTT');

  DBMS_EPG.set_dad_attribute (
    dad_name  => 'my_epg_dad',
    attr_name  => 'default-page',
    attr_value => 'home');
END;
/


-----------------------------------------------------------------------------------------------------
7. GET_ALL_DAD_ATTRIBUTES를 통해 모든 DAD Attribute에 대해 검색 가능 합니다.
-----------------------------------------------------------------------------------------------------

SET SERVEROUTPUT ON SIZE UNLIMITED
DECLARE
  l_attr_names  DBMS_EPG.varchar2_table;
  l_attr_values  DBMS_EPG.varchar2_table;
BEGIN
  DBMS_OUTPUT.put_line('Attributes');
  DBMS_OUTPUT.put_line('==========');

  DBMS_EPG.get_all_dad_attributes (
    dad_name    => 'my_epg_dad',
    attr_names  => l_attr_names,                     
    attr_values => l_attr_values);

  FOR i IN 1 .. l_attr_names.count LOOP
    DBMS_OUTPUT.put_line(l_attr_names(i) || '=' || l_attr_values(i));
  END LOOP;
END;
/


-----------------------------------------------------------------------------------------------------
8. GET_DAD_ATTRIBUTE function은 특정한 attribute에 대해 조회하는 기능을 가집니다.
-----------------------------------------------------------------------------------------------------

SET SERVEROUTPUT ON SIZE UNLIMITED
DECLARE
  l_attr_name  VARCHAR2(30);
  l_attr_value  VARCHAR2(30);
BEGIN
  DBMS_OUTPUT.put_line('Attribute');
  DBMS_OUTPUT.put_line('=========');

  l_attr_name  := 'database-username';
  l_attr_value := DBMS_EPG.get_dad_attribute (
                    dad_name  => 'my_epg_dad',
                    attr_name => l_attr_name);

  DBMS_OUTPUT.put_line(l_attr_name || '=' || l_attr_value);

  l_attr_name  := 'default-page';
  l_attr_value := DBMS_EPG.get_dad_attribute (
                    dad_name  => 'my_epg_dad',
                    attr_name => l_attr_name);

  DBMS_OUTPUT.put_line(l_attr_name || '=' || l_attr_value);
END;
/
Attribute
=========
database-username=SCOTT
default-page=home

PL/SQL procedure successfully completed.


-----------------------------------------------------------------------------------------------------
8.DELETE_DAD_ATTRIBUTE procedure는 DAD Attribute를 삭제 합니다.
-----------------------------------------------------------------------------------------------------

BEGIN
  DBMS_EPG.delete_dad_attribute (
    dad_name  => 'my_epg_dad',
    attr_name  => 'database-username');
END;
/


-----------------------------------------------------------------------------------------------------
9. AUTHORIZE_DAD  procedure는 특정한 Achema가 DAD를 경유하여 애겟스가 가능하게 합니다.
-----------------------------------------------------------------------------------------------------


BEGIN
  DBMS_EPG.authorize_dad (
    dad_name => 'my_epg_dad',
    user    => 'SCOTT');
END;
/
The authorization can be reversed using the DEAUTHORIZE_DAD procedure.

BEGIN
  DBMS_EPG.deauthorize_dad (
    dad_name => 'my_epg_dad',
    user    => 'SCOTT');
END;
/


-----------------------------------------------------------------------------------------------------
10. DAD의 설정이 완료되면 DAD Test를 위해 아래의 procedure를 SCOTT 계정에서 컴파일 합니다.
-----------------------------------------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE scott.home IS
BEGIN
  HTP.htmlopen;
  HTP.headopen;
  HTP.title('This is a test page!');
  HTP.headclose;
  HTP.bodyopen;
  HTP.print('This is a test page! DateTime: ' || TO_CHAR(SYSTIMESTAMP));
  HTP.bodyclose;
  HTP.htmlclose;
END home;
/


-----------------------------------------------------------------------------------------------------
11. 아래 내용을 listener.ora에 추가한 후 리스너를 restart 합니다.
-----------------------------------------------------------------------------------------------------

(DESCRIPTION=
  (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=8080))(Presentation=HTTP)(Session=RAW)
)
(DESCRIPTION=
  (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=2100))(Presentation=FTP)(Session=RAW)
)


-----------------------------------------------------------------------------------------------------
12. 브라우저를 통해 확인
-----------------------------------------------------------------------------------------------------

  http://<server-name>:8080/my_epg_dad/home

이젠 PL/SQL Web Toolkit or PL/SQL Server Pages를 통해 PL/SQL web applications을 개발할 준비가 되었습니다.
나름대로 별도의 자료로 공부해 보시기를 바라며...

-----------------------------------------------------------------------------------------------------
13. DROP_DAD는 원치않는 DAD를 삭제 합니다.
-----------------------------------------------------------------------------------------------------

-- Cleanup the DAD.
BEGIN
  DBMS_EPG.drop_dad (
    dad_name => 'my_epg_dad');
END;
/
 

댓글 없음:

댓글 쓰기