레이블이 오라클CASE인 게시물을 표시합니다. 모든 게시물 표시
레이블이 오라클CASE인 게시물을 표시합니다. 모든 게시물 표시

2013년 10월 17일 목요일

오라클 동의어(Oracle Synonym) - 테이블, 뷰, 시쿼스에 대한 별칭

오라클 동의어(Oracle Synonym)
- 테이블, 뷰, 시쿼스에 대한 별칭, 동의어
- public, private로 생성 가능
- Public synonym은 생성할 수 있는 권한이 있는 user만이 만들 수 있으며, 모든 user들이 사용할 수 있다.

[문법]
CREATE [PUBLIC] SYNONYM
 synonym명 FOR object;
DROP [PUBLIC] SYNONYM synonym명; 
[예]
CREATE SYNONYM emp FOR scott.emp;
DROP SYNONYM emp;
 

SQL> conn system/onj
 
SQL> SELECT * FROM s_emp;
(* Error 발생)
 
SQL> SELECT * FROM scott.s_emp;
(* system user는 SELECT ANY TABLE 권한을 가지고 있으므로 성공)
 
SQL> CREATE SYNONYM s_emp FOR scott.s_emp;
 
SQL> SELECT * FROM s_emp;
 
SQL> CREATE TABLE s_emp (a number);
(* Error 발생)
 
Base table의 이름이 바뀌면 Synonym은 더 이상 사용할 수 없게 된다.

SQL> conn scott/tiger

SQL> RENAME s_emp TO e;

SQL> conn system/manager

SQL> SELECT * FROM s_emp;
(* 에러 발생)

SQL> conn scott/tiger

SQL> RENAME e TO s_emp;

2013년 10월 3일 목요일

[ORACLE강좌,오라클교육]오라클테이블 참조무결성, TABLE 참조 무결성(Referential Integrity)

[ORACLE강좌,오라클교육]오라클테이블 참조무결성, TABLE 참조 무결성(Referential Integrity)

데이터참조무결성(Referential Integrity) 에는 참조되는값(referenced value)이 delete 되거나 update 될 때 자식테이블의값(dependent value)을 어떻게 유지할 것인지에 따라 다음과 같은 rule의 종류가 있다.
 
 
Restrict
Referenced value에 대해 deleteupdate를 허락하지 않음(DML문장의 끝이나 Transaction의 끝에 check)
Set to Null
Referenced value에 대한 deleteupdate를 하면서 모든 dependent valueNULL로 설정함
Set to Default
Referenced value에 대한 deleteupdate를 하면서 모든 dependent valueDefault value로 설정함
Cascade
Referenced valueupdate 될 때 dependent value를 같은 값으로 설정하고, delete 될 때는 dependent row들을 함께 delete .
No Action
Referenced value에 대해 deleteupdate를 허락하지 않음
 
오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터
(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  



오라클 사용자의 비밀번호 변경하기

오라클에서 사용자 비밀번호 변경하기...

사용자의 비밀번호를 변경하는 방법은 alter user를 통해 하는 방법과  SQL*Plus로 로그온 한 상태에서 password 를 입력 함으로서 (Unib/Linux에서 사용자 비밀번호 변경과 비슷하게) 변경이 가능 합니다. 

아래의 실습을 보고 이해 하도록 하죠... 


SQL> connect scott/tiger
연결되었습니다.

SQL> password
SCOTT에 대한 암호를 변경합니다
이전 암호: *****                  <-- tiger
새로운 암호: **                    <-- t1
새 암호 다시 입력: **            <-- t1
암호가 변경되었습니다

SQL> connect scott/tiger
ERROR:
ORA-01017: invalid username/password; logon denied


경고: 이제는 ORACLE에 연결되어 있지 않습니다.
SQL> connect scott/t1
연결되었습니다.
SQL> alter user scott identified by tiger;

사용자가 변경되었습니다.

SQL> connect scott/t1;
ERROR:
ORA-01017: invalid username/password; logon denied


경고: 이제는 ORACLE에 연결되어 있지 않습니다.
SQL> connect scott/tiger
연결되었습니다. 

라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터
(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  





2013년 8월 5일 월요일

[자바교육,오라클교육,자바프레임워크, 스트럿츠]Struts Action처리 후 다음 View 결정하기, 오라클자바커뮤니티

Action처리 후 다음 View 결정하기 


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 
 www.onjprogramming.co.kr 


Action 클래스의 execute() 메소드를 보시면 Return형이 org.apache.struts.action.ActionForward임을 알 수 있습니다. ActionForward 클래스는 execute()메소드가 종료된 후 Controller에서 제어를 넘길 곳을 지정 합니다.

또한 코드 내에서 실제 파일명을 주는 대신 ActionForward 매핑에 JSP페이지(View)를 할당하고 이 ActionForward를 웹 애플리케이션 전체에서 사용 가능 하게 할 수 있습니다.

아래는 struts-config.xml 파일 내의 ActionForward 매핑 예 입니다.

<global-forwards>
        <forward name="success" path="/main.jsp" />
        <forward name="logoff" path="/logoff.do" />
        <forward name="login" path="/login.jsp" />
    </global-forwards>

또는 어떠한 Action에서만 Actionforward를 참조하게 하기 위해서는 다음과 같이 할 수도 있습니다.

<action
        Path=”/LoginSunmit”
        Type=”login2.LoginAction”
        Scope=”request”>
        <forward name=”SUCCESS” path=”/success.jsp” redirect=”true”/>
</action>

위에서 redirect를 true로 했으므로 이 경우엔 forward가 아니라 redirection을 이용합니다.

아래는 로그인 예제의 LogoffAction.java(로그오프 Action 처리) 입니다.

package login2;

import org.apache.struts.action.Action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;

import login2.LoginForm;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class LogoffAction extends Action {       
       
        public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
               
                //필요한 어트리뷰트를 뽑아 냅니다.
                //LoginAction에서 사용자의 로그온개체를 Consants.USER_KEY라는 이름으로 세션에 저장
                HttpSession session = request.getSession();
                UserInfoVO userinfo = (UserInfoVO)session.getAttribute(Constants.USER_KEY);
               
                if (userinfo != null) {
                        //로그를 남기자
                        StringBuffer buf = new StringBuffer("User Logout : " + userinfo.getId());
                        servlet.log(buf.toString());                                       
                }               
               
                //사용자의 로그인을 삭제, session.invaidate() 의 경우 션의 모든 것을 무효화 시킴.
                session.removeAttribute(Constants.USER_KEY);
               
                //성공적으로 처리 되었음을 알림
                return (mapping.findForward(Constants.SUCCESS));
               
        }

       

2013년 8월 2일 금요일

자바 위임을 이용한 Adapter 패턴 예제 (java adapter pattern, java design pattern

안녕하세요~ oraclejavacommunity 입니다. 위임을 이용한 Adapter 패턴 예제 입니다.
 
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 



위임이란 어떤 메소드의 처리를 다른 인스턴스의 메소드에 맡긴다는 의미 


Banner.java및 Main.java는 앞 예제와 동일함

//Print.java
public abstract class  Print {
public abstract String printString();
}


//PrintBanner.java
public class PrintBanner extends Print {
private Banner banner;
public PrintBanner (String str) {
this.banner = new Banner(str);
}
public String  printString() {
return "(" + banner.showString() + ")";
}
}
 
  

자바 상속을 이용한 Adapter 패턴 예제 (java adapter pattern)


안녕하세요~ 오라클자바커뮤니티(www.oraclejavacommunity.co.kr) 입니다.
<"자바 디자인 패턴에 입문" 에 나와 있는 사례소개 합니다.>
 
 오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 


상속을 이용한 Adapter 패턴 예제

이미 제공 되는것과  필요로 하는것과의 사이에서 그 사이를 메꾸어 주는것이  Adapter의 역할
 Adapter 패턴은 Wrapper 패턴이라고도 한다.
 Adapter 패턴은 기존의 클래스를 이용해서 필요한 클래스를 만든다.  기존의 것과 필요한 클래스가 기능이 차이가 많은 경우에는 Adapter 패턴을 이용할수 없다. 물론 기존 클래스의 소스는 필요없다.
 Adapter 패턴은 기존버전과 새버전을 공존시키면서 S/W의 유지보수를 가능하게 해 준다.
 Adapter 패턴에는 Class에 위한 Adapter 패턴(상속이용)과 인스턴스에 의한 Adapter 패턴(위임이용) 두가지 형태가 있다.




이 예제는 기존에 제공되는 Class의 기능(주어진 문자열을 출력)을 이용하여 양쪽으로 괄호를 붙여 출력하는 간단한 예제이다.
 이미 제공되는것은 Banner Class이며 필요한것은 Print 인터페이스이고 교환장치(Adpater)는 PrintBanner Class이다.


//Banner.java
public class Banner {
private String str;
public Banner (String str) {
this.str = str;
}
public String  showString() {
return str ;
}
}
//Print.java
public interface Print {
public abstract String printString();
}
//PrintBanner.java
public class PrintBanner extends Banner implements Print {
public PrintBanner (String str) {  super(str);  }
public String  printString() {
return "(" + showString() + ")";
}
}
//Main.java
public class Main {
public static void main(String args[]) {
//PrintBanner p = new PrintBanner("hello"); ?
//만약 PrintBanner의 고유의 메소드가 있다면 
//이를 사용하기 위해서는 어떻게?
Print p = new PrintBanner("hello");
System.out.println(p.printString());
}

[Oracle Hint강의]join hint 조인 방법 변경(USE_MERGE) , 오라클힌트강좌

[Oracle Hint강의]join hint 조인 방법 변경(USE_MERGE)
 
구로디지털 오엔제이프로그래밍실무교육센터
 
 
머지 조인(Merge Join)이 일어나도록 유도하는 힌트 구문으로 이 경우 거의 SORT를 동반하므로 SORT MERGE JOIN이라고 부릅니다. 머지 조인이란 양쪽 테이블에서 대상 로우를 추출 후 조인 컬럼을 기준으로 SORT를 한 후 최종 결과를 만들어 내는 조인 방식 입니다.
 
USE_NL처럼 FROM 절 다음에 위치하는 테이블의 순서는 중요하지 않은데 그 이유는 어차피 독립적으로 정렬된 후 병합이 일어나므로 중요하지 않다고 할 수 있으며 SORT MERGE JOIN에서는 드라이빙 테이블의 의미가 없습니다.
 
[형식]
 
 
[]
아래 예제는 Oracle 10g에서 돌렸습니다.
 
 
select
       e.empno,
          e.ename,
          d.dname,
          d.loc
from   dept d, emp e
where  e.deptno = d.deptno
 
---------------------------------------------------------------
Operation            Object Name      Rows     Bytes    Cost     
-------------------------------------------------------------
SELECT STATEMENT Optimizer Mode=ALL_ROWS               14                      5
  MERGE JOIN                  14         406       5                                                       
    TABLE ACCESS BY INDEX ROWID         SCOTT.DEPT      4           72         2            
      INDEX FULL SCAN   SCOTT.PK_DEPT             4                        1            
    SORT JOIN                 14         154       3                                                       
      TABLE ACCESS BY INDEX ROWID      SCOTT.EMP        14         154       2            
        INDEX FULL SCAN             SCOTT.IDX_EMP_DEPTNO            13                      1                                                           
 
select
       e.empno,
          e.ename,
          d.dname,
          d.loc
from   dept d, emp e
where  e.deptno = d.deptno
 
---------------------------------------------------------------------
Operation            Object Name      Rows     Bytes    Cost     
------------------------------------------------------------------
SELECT STATEMENT Optimizer Mode=ALL_ROWS               14                      5
  MERGE JOIN                  14         406       5                                                       
    TABLE ACCESS BY INDEX ROWID         SCOTT.DEPT      4           72         2            
      INDEX FULL SCAN   SCOTT.PK_DEPT             4                        1                SORT JOIN                14         154               3                                                       
      TABLE ACCESS BY INDEX ROWID      SCOTT.EMP        14         154       2            
        INDEX FULL SCAN             SCOTT.IDX_EMP_DEPTNO            13                      1                                                           
 
[실습]
 
-      실습을 위한 예제 테이블 및 데이터는 아래 링크에서 확인 바랍니다.
 
myemp1 : 1000만건
myemp1_old : 100만건
mydept : 5
 
테스트환경 : oracle 11g
 
 
MYEMP1이 비드라이빙 테이블이지만 머지조인 에서는 별 의미 없다.
 
SQL> select
  2         e.ename,
  3         d.dname
  4  from   mydept1 d, myemp1 e
  5  where  e.deptno = d.deptno   ;
 
20000000 개의 행이 선택되었습니다.
 
   : 00:02:22.62
 
 
---------------------------------------------------------------------------------------
| Id  | Operation           | Name    | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |         |    20M|   476M|       | 68516   (2)| 00:13:43 |
|   1 |  MERGE JOIN         |         |    20M|   476M|       | 68516   (2)| 00:13:43 |
|   2 |   SORT JOIN         |         |    10 |   100 |       |     4  (25)| 00:00:01 |
|   3 |    TABLE ACCESS FULL| MYDEPT1 |    10 |   100 |       |     3   (0)| 00:00:01 |
|*  4 |   SORT JOIN         |         |    10M|   143M|   459M| 68463   (1)| 00:13:42 |
|   5 |    TABLE ACCESS FULL| MYEMP1  |    10M|   143M|       | 16941   (1)| 00:03:24 |
 
 
SQL> select
  2         e.ename,
  3         d.dname
  4  from   myemp1 e, mydept1 d
  5  where  e.deptno = d.deptno ;
 
20000000 개의 행이 선택되었습니다.
 
   : 00:02:09.58
 
---------------------------------------------------------------------------------------
| Id  | Operation           | Name    | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |         |    20M|   476M|       | 68516   (2)| 00:13:43 |
|   1 |  MERGE JOIN         |         |    20M|   476M|       | 68516   (2)| 00:13:43 |
|   2 |   SORT JOIN         |         |    10M|   143M|   459M| 68463   (1)| 00:13:42 |
|   3 |    TABLE ACCESS FULL| MYEMP1  |    10M|   143M|       | 16941   (1)| 00:03:24 |
|*  4 |   SORT JOIN         |         |    10 |   100 |       |     4  (25)| 00:00:01 |
|   5 |    TABLE ACCESS FULL| MYDEPT1 |    10 |   100 |       |     3   (0)| 00:00:01 |
---------------------------------------------------------------------------------------