2013년 7월 30일 화요일

[오라클강의,자바강의,오라클자바교육,오라클교육,자바교육,자바오라클]Oracle Explicitly Named Indexes(9i이상)

oracle pk index
오라클 9i이상 에서 인덱스는 Primary Key Unique Key와는 별도로 CREATE TABLE
USING INDEX구 안에 CREATE INDEX 문법을 이용해서 정의하는 것이 가능해 졌습니다.


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



아마도 대부분의 사용자들은 다음과 같은 방식을 알고 계실텐데

예제를 보시면서 어떤 것이 바뀌었는지 확인해 보도록 하죠.

SQL> create table test (
  2  c1 varchar2(4) not null,
3  c2 number(10)  not null,
4  constrint pk_test primary key(c1) using index
  4  );

테이블이 생성되었습니다.


위의 create table문은 pk_test라는 이름을 가지는 primary key 제약 조건을 만들며 아울러 pk_test라는 이름을 가진 인덱스를 만듭니다. 이 두가지는 user_ind_colums 뷰와 user_constraints 뷰에서 table_name = TEST라는 조건을 주시면 확인이 가능합니다.

그러나 9i이후에서는 인덱스에 대해 명시적으로 이름을 주는 것이 가능해 졌는데

우선 아래의 예제를 참고 하도록 하죠

SQL> create table test (
  2  c1 varchar2(4) not null,
  3  c2 number(7),
  4  constraint pk_test primary key(c1)
  5  using index
  6      (create index idx_test_c1 on test(c1))
  7  );

테이블이 생성되었습니다.

이 경우는 테이블을 만들면서 primary key를 만드는데 (원래는 default pk를 만들게 되면 그 컬럼으로 유니크 인덱스를 만듭니다.) 인덱스의 이름은 primary key 이름과 다르게 주기 위해 using index 구안에 create index문을 이용해서 인덱스를 생성했습니다.

--------------------------------------------------------------------
아래의 SQL문중 하나를 이용해 인덱스는 놔두고 PK만 삭제할 수 있습니다.
--------------------------------------------------------------------

SQL> alter table test drop primary key keep index;

테이블이 변경되었습니다.

또는

SQL> alter table test drop constraint pk_test;

테이블이 변경되었습니다.

[출처]오라클자바커뮤니티



[오라클교육,자바교육,오라클자바교육]Column Name & Constraints rename 이름 변경(오라클 컬럼이름, 제약조건 이름 변경)

테이블이나 인덱스의 이름을 변경하는 것은 오라클 9iR2 이전에도 가능했지만 9iR2에서는 테이블의 컬럼 명 또는 제약조건의 이름을 변경하는 것이 가능해 졌습니다.



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



SQL> create table test (
  2  c1 varchar2(4) not null,
  3  c2 number(10)  not null
  4  );

테이블이 생성되었습니다.

프라이머리 키를 추가 합니다. 이때 C1컬럼에 대해 인덱스가 생성 됩니다.

SQL> alter table test add (constraint pk_test
  2                        primary key (c1));

테이블이 변경되었습니다.

SQL> desc test;
 이름                                      ?      유형
 ----------------------------------------- -------- --------------

 C1                                        NOT NULL VARCHAR2(4)
 C2                                        NOT NULL NUMBER(10)

사용자의 제약 조건을 확인 할  수 있는 USER_CONSTRAINTS VIEW를 통해 TEST 테이블에 제약조건의 타입이 P 인것 즉 Primary Key인 제약조건을 검색 합니다. 제약조건에는 NOT NULL, UNIQUE, CHECK, PRIMARY KEY등 테이블의 컬럼에 제약을 가하는 조건을 말합니다.

SQL> select constraint_name
  2  from   user_constraints
  3  where  table_name = 'TEST'
  4  and    constraint_type = 'P';

CONSTRAINT_NAME
------------------------------
PK_TEST

이번에는 TEST 테이블에 생성되어 있는 인덱스를 확인 합니다. 위에서 C1 컬럼을 Primary Key로 설정하여 저절로 이 컬럼에 대한 인덱스가 생성되어 있습니다.

SQL> select index_name,
  2         column_name
  3  from   user_ind_columns
  4  where  table_name = 'TEST';

INDEX_NAME           COLUMN_NAME
------------------------------------

PK_TEST                     C1

우선 테이블의 이름을 바꾸어 봅니다. 이 기능은 오라클의 이전 버전에서도 되는 기능 입니다

SQL> alter table test rename to test1;

테이블이 변경되었습니다.

이번에는 컬럼명을 바꾸어 보죠^^

SQL> alter table test1 rename column c1 to code;

테이블이 변경되었습니다.

Primary Ket 제약 조건의 이름을 변경 합니다.

SQL> alter table test1 rename constraint pk_test to pk_test1;

테이블이 변경되었습니다.

이번에는 Primary Key에 걸린 인덱스의 이름을 바꿉니다.

SQL> alter index pk_test rename to pk_test1;

인덱스가 변경되었습니다.

위에서 변경한 내역에 대해 확인해 보겠습니다

SQL> select constraint_name
  2  from   user_constraints
  3  where  table_name = 'TEST1'
  4  and    constraint_type = 'P';

CONSTRAINT_NAME
------------------------------
PK_TEST1

SQL> select index_name,
  2         column_name
  3  from   user_ind_columns
  4  where  table_name = 'TEST1';

INDEX_NAME             COLUMN_NAME
---------------------------------------------

PK_TEST1                    CODE

[출처]오라클자바커뮤니티



[SQL 팁]CASE를 활용한 SQL문장의 통합(오엔제이프로그래밍,오라클,자바실무교육)

1.       개요
동일한 테이블을 사용하고 WHERE 조건이 비슷한 유형으로 전개되는 SQL 문은 하나로 통합될 음을 유의하고 아래 예를 참고하자.


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



[첫번째 SQL]
SQL> select max(empno) from emp3
  2  where deptno > 10;

MAX(EMPNO)
----------
      7902

[두번째 SQL]
SQL>  select count(empno) from emp3
  2   where deptno > 10
  3  and   sal > 2000;

COUNT(EMPNO)
------------
     2097152


동일한 테이블에서 비슷한 조건이면서 하나는 MAX , 하나는 COUNT 값을 구하는 것이다. 번째 SQL 문의 sal > 2000 제외하고 같은 조건 절을 갖고 있다는 것을 있다.

2) 문제점

하나의 SQL 문으로 통합할 있음에도 2 개로 SQL 나누어 수행하였다.

3) 해결 방안

위의 경우 CASE 사용하면 쓰면 개의 SQL 하나로 만들어 테이블을 액세스 하게 있다다음과 같이 CASE 쓰면 SAL>2000 경우 계속 1 더해 줌으로서 전체에 SAL > 2000 값이 있는지 COUNT 해주는 것과 전체 COUNT 값도 있다.  이와 같이 번에 테이블을 액세스 있는 SQL 문을 쓰면 테이블을 번에 걸쳐 읽을 것을 읽고도 처리할 있으므로 보다 효율적인 프로그램이 되는 것이다.


SQL>  select max(empno), sum(case when sal>2000 then 1 else 0 end)
  2   from emp3
  3  where deptno > 10;

MAX(EMPNO) SUM(CASEWHENSAL>2000THEN1ELSE0END)
---------- ----------------------------------
      7902                            2097152



[출처]오라클자바커뮤니티



(오라클,자바 실무교육,SQL) oracle default 키워드 사용 예제

oracle default keyword를 이용한 예문이니 참고하세요~


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



SQL>  create table address (
  2   name varchar2(15) not null primary key,
  3   age number(3) default 0
  4   );
<?XML:NAMESPACE PREFIX = O /> 
Table created.

SQL> insert into address (name, age) values ('jclee1',1);

1 row created.

SQL> insert into address (name, age) values ('jclee2',2);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from address ;

NAME                   AGE
--------------- ----------
jclee1                   1
jclee2                   2

SQL> update address set age=default
  2  where name = 'jclee1';

1 row updated.

SQL> commit;

Commit complete.

SQL> select * from address ;

NAME                   AGE
--------------- ----------
jclee1                   0
jclee2                   2

[출처]오라클자바커뮤니티



2013년 7월 29일 월요일

(ORACLE SQL Returning 사용하기 ) INSERT, UPDATE or DELETE statement에 의해 영향을 받는 로우를 검색 할 수 있게 해주는 구

INSERT, UPDATE or DELETE statement에 의해 영향을 받는 로우를 검색 할 수 있게 해주는 구...
참고하시고, 열공하세요. 

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


www.onjprogramming.co.kr


SQL> variable v_ename varchar2(10);
SQL> variable v_sal number;
SQL> insert into emp (empno, ename, sal)
  2  values (5555, 'jclee', 7000)
  3  returning ename, sal into :v_ename, :v_sal;

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

SQL> print v_ename;

V_ENAME
--------------------------------
jclee

SQL> print v_sal;

    V_SAL
----------
      7000

SQL> update emp set ename='tatata',
  2                sal = 9000
  3  where ename = 'jclee'
  4  returning ename, sal into :v_ename, v_sal;
returning ename, sal into :v_ename, v_sal
                                    *
4행에 오류:
ORA-00905: 누락된 키워드


SQL> update emp set ename='tatata',
  2                sal = 9000
  3  where ename = 'jclee'
  4  returning ename, sal into :v_ename, :v_sal;

1 행이 갱신되었습니다.

SQL> print v_ename;

V_ENAME
--------------------------------
tatata

SQL> print v_sal;

    V_SAL
----------
      9000

SQL> commit;

커밋이 완료되었습니다.  

JSP Chatting

참고하세요~


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





소스 파일은 


http://blog.naver.com/PostView.nhn?blogId=julymorning4&Redirect=View&logNo=100192997244&categoryNo=23&isAfterWrite=true 


에서 참고하세요~

JAVA JNDI를 이용한 DNS 서비스 구현(JAVA JNDI DNS)

JNDI를 이용한 DNS 서비스 구현


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



즉 자바 응용 프로그램이 어느 위치에 있든지 필요한 자바 객체들을 검색할 수 있는 것입니다. EJB 환경에서는 JNDI를 이용해 EJB Home 객체를 얻어낸 후 이를 이용해 Java Beans 객체를 생성하거나 접근하게 됩니다.

JNDI DNS(Domain Name System), COS(Common Object Services) 등의 네이밍 서비스 표준과 LDAP(Lightweight Directory Access Protocol), NDS(NetWare Directory Service), NIS(Netware Information System) API를 제공 합니다.

참고로 JDK1.4 부터는 JNDI 서비스 프로바이더에 DNS Service Provoder를 제공하여 DNS 서비스를 통해 네이밍 서비스를 받을 수 있도록 지원 했는데 아래는 그 예제 입니다.

/*
 * Created on 2005. 1. 9
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author 이종철
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
import java.util.Hashtable;
import javax.naming.directory.*;
import javax.naming.NamingEnumeration;


public class SimpleDNS {

             public static void main(String[] args) {
                           Hashtable h = new Hashtable();
                           h.put("java.naming.factory.initial","com.sun.jndi.dns.DnsContextFactory");
                           h.put("java.naming.provider.url","dns://ns.dacom.co.kr");
                          
                           try {
                                        //DirContext 초기화
                                        DirContext context = new InitialDirContext(h);
                                       
                                        //DNS질의 결과를 받아 오자...
                                        Attributes attribute = context.getAttributes("onjprogramming.co.kr");
                                       
                                        //질의 결과 출력
                                        NamingEnumeration ne = attribute.getAll();
                                        System.out.println("onjprogramming.co.kr --> ");
                                        while(ne.hasMoreElements()) {
                                                     System.out.println(ne.next());
                                        }
                           }
                           catch(Exception e) {
                                        e.printStackTrace();
                           }
                          
             }
}

[결과]
onjprogramming.co.kr -->
NS: ns1.gabia.co.kr., ns.gabia.net., ns.gabia.co.kr.


[출처]오라클자바커뮤니티



www.oraclejavacommunity.cop.kr

자바 스윙(JAVA Swing)의 HTMLEditorKit을 이용한 웹 페이지 파싱

Swing을 이용한 웹페이지 파싱



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



JDK의 swing 패키지에는 html을 파싱 하는 기능이 포함되어 있는데 이기능을 적절히 이용하면 웹 페이지에서 원하는 내용을 추출 할 수 있을 것입니다.

 다음의 예제를 보시면 html Tag중에서 원하는 태그의 내용을 간단히 파싱하는 것을 확인 할 수 있으니 참고 하시기 바랍니다

[OnjWebParser .java]

import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.HTML;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpURLConnection;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.parser.ParserDelegator;
/**
 *
 * @author 이종철(오라클자바커뮤니티, 오엔제이프로그래밍 실무학원) * TODO To change the template for this generated type comment go to
 *
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class OnjWebParser {
 // 파서는 콜백 형식으로 되어 있다. 각 태그가 들어 올때 적절한 메소드가 호출됨
 private class CallbackHandler extends HTMLEditorKit.ParserCallback {
  // 태그가 시작할 때 호출 되는 메소드
  public void handleStartTag(HTML.Tag tag, MutableAttributeSet a, int pos) {
   // <A href 인 경우... A태그를 찾는다...
   if (tag == HTML.Tag.A) {
    System.out
      .println(a
        .getAttribute(javax.swing.text.html.HTML.Attribute.HREF));
   }
  }
  // 텍스트가 들어올때 호출되는 메소드
  public void handleText(char[] data, int pos) {
   System.out.println(data);
  }
 }
 public void parse(String str) {
  String content = null;
  try {
   // 입력받은 URL에 연결하여 InputStream을 통해 읽은 후 파싱 한다.
   URL url = new URL(str);
   HttpURLConnection con = (HttpURLConnection) url.openConnection();
   InputStreamReader reader = new InputStreamReader(
     con.getInputStream(), "euc-kr");
   new ParserDelegator().parse(reader, new CallbackHandler(), true);
   con.disconnect();
  }
  catch (Exception e) {
   e.printStackTrace();
  }
 }
 public static void main(String[] args) {

  OnjWebParser parser = new OnjWebParser();
 }
}

[결과]
오엔제이프로그래밍실무학원
./
javascript:goMenu01();
ㆍHOMEㆍ

mailto:webmaster@onjprogramming.co.kr
COMTACT USㆍ

javascript:goMenu63();
SITEMAP
javascript:fn_loginok()

ID저장
javascript:fn_loginok()
javascript:fn_loginok()
../member/mem-join.html
../member/mem-idpw.html
today Hit
126
교육센터회원
5919
커뮤니티회원
9433
/onj/curri/curri-master.html?command=1625
#tabs-1
JAVA
#tabs-2
ORACLE
#tabs-3
iPhone/Android
#tabs-4
.NET
#tabs-5
표준웹/HTML5
#tabs-6
채용/취업무료교육
#tabs-7
초보자(재학생)코스
../curri/curri-master.html?command=1645
JAVA&WEB프레임워크실무과정

14일
98시간

08-09
../curri/curri-master.html?command=1673
Spring3.X, MyBatis, Hibernate실무과정

5일
35시간

08-09
../curri/curri-master.html?command=1677
JAVA,JSP 초보에서 실무까지


18일
56시간

07-31
../curri/curri-master.html?command=1626
자바초보에서안드로이드까지

18일
54시간

08-01
../curri/curri-master.html?command=1667
JAVA&WEB프레임워크실무과정

33일
99시간

08-08
../curri/curri-master.html?command=1674
Spring3.X, MyBatis, Hibernate실무과정

12일
36시간

08-08
../curri/curri-master.html?command=1676
(개발과정)Ajax,jQuery,MyBatis&Spring3.X개발자과정

14일
42시간

08-09
../curri/curri-master.html?command=1627
자바초보에서안드로이드까지

8일
56시간

08-03
../curri/curri-master.html?command=1646
JAVA&WEB프레임워크실무과정

14일
98시간

08-03
../curri/curri-master.html?command=1661
Spring3.X, MyBatis, Hibernate실무과정

5일
35시간

08-10
../curri/curri-master.html?command=1662
MiPlatform, XPlatform 실무강좌

5일
35시간

08-10
../curri/curri-master.html?command=1675
(개발과정)Ajax,jQuery,MyBatis&Spring3.X개발자과정

6일
42시간

08-10
../curri/curri-master.html?command=1379
SQL초보에서실전전문가까지


8일
56시간

07-31
../curri/curri-master.html?command=1642
오라클 마스터


18일
54시간

07-29
../curri/curri-master.html?command=1583
SQL초보에서실전전문가까지

18일
54시간

08-07
../curri/curri-master.html?command=1666
SQL초보에서실전전문가까지

8일
56시간

08-03
../curri/curri-master.html?command=1637
오라클 마스터

8일
56시간

08-10
../curri/curri-master.html?command=1640
Android Developer 코스

5일
40시간

08-09
../curri/curri-master.html?command=1638
Android Developer 코스


14일
42시간

07-31
../curri/curri-master.html?command=1626
자바초보에서안드로이드까지

18일
54시간

08-01
../curri/curri-master.html?command=1332
iPhone 하이브리드 앱 개발 실무과정

14일
42시간

08-09
../curri/curri-master.html?command=1627
자바초보에서안드로이드까지

8일
56시간

08-03
../curri/curri-master.html?command=1216
iPhone 하이브리드 앱 개발 실무과정

6일
42시간

08-10
../curri/curri-master.html?command=1639
Android Developer 코스

6일
42시간

08-10
../curri/curri-master.html?command=1547
C#,ASP.NET마스터

8일
56시간

08-08
../curri/curri-master.html?command=1671
C#,ASP.NET마스터

18일
56시간

08-08
../curri/curri-master.html?command=1650
C#,ASP.NET마스터

8일
56시간

08-03
../curri/curri-master.html?command=1635
웹퍼블리싱 마스터

5일
40시간

08-09
../curri/curri-master.html?command=1625
[채용확정교육]오라클자바개발자4개월과정

80일
560시간

08-16
../curri/curri-master.html?command=1632
웹퍼블리싱 마스터

14일
42시간

08-08
../curri/curri-master.html?command=1630
HTML5, CSS3,Ajax, jQuery마스터과정

14일
42시간

08-09
../curri/curri-master.html?command=1631
HTML5, CSS3,Ajax, jQuery마스터과정


6일
42시간

00-00
../curri/curri-master.html?command=1633
웹퍼블리싱 마스터

6일
42시간

08-03
../curri/curri-master.html?command=1662
MiPlatform, XPlatform 실무강좌

5일
35시간

08-10
../curri/curri-master.html?command=1625
[채용확정교육]오라클자바개발자4개월과정

80일
560시간

08-16
../curri/curri-master.html?command=1547
C#,ASP.NET마스터

8일
56시간

08-08
../curri/curri-master.html?command=1671
C#,ASP.NET마스터

18일
56시간

08-08
../curri/curri-master.html?command=1650
C#,ASP.NET마스터

8일
56시간

08-03
../curri/curri-master.html?command=1642
 오라클 마스터

07-29
../curri/curri-master.html?command=1677
 JAVA,JSP 초보에서 실무까


07-31
../curri/curri-master.html?command=1626
 자바초보에서안드로이드까


08-01
../curri/curri-master.html?command=1650
 C#,ASP.NET마스터

08-03
../curri/curri-master.html?command=1646
 JAVA&WEB프레임워크실무과


08-03
../curri/curri-master.html?command=1583
 SQL초보에서실전전문가까지

08-07
/onj/curri/m-curri-master.html
../curri/curri-master.html?command=1631
 HTML5, CSS3,Ajax, jQuery


00-00
../curri/curri-master.html?command=1379
 SQL초보에서실전전문가까지

07-31
../curri/curri-master.html?command=1638
 Android Developer 코스

07-31
../curri/curri-master.html?command=1627
 자바초보에서안드로이드까


08-03
../curri/curri-master.html?command=1633
 웹퍼블리싱 마스터

08-03
../curri/curri-master.html?command=1547
 C#,ASP.NET마스터

08-08
#tabsub-1
NOTICE
#tabsub-2
구인구직
../notice/notice-content.html?num=1221&page=
오엔제이 프로그래밍 실무학원 소개
2013-07-20
../notice/notice-content.html?num=1064&page=
(전액무료)개발잘하는 신입 무료로 뽑기 프로젝트(미취업자취업무료교육)

2013-06-15
../notice/notice-content.html?num=1233&page=
[평일주간개강확정 7월15일] 채용확정자교육 16기
2013-07-12
../notice/notice-content.html?num=1232&page=
[평일야간개강확정7월19일] iPhone 하이브리드 앱 개발 실무과정
2013-07-08
../notice/notice-content.html?num=1230&page=
[평일주간개강확정] 7/8]Spring3.X, MyBatis, Hibernate실무과정
2013-06-27
../notice/notice-content.html?num=1229&page=
[평일야간개강확정 7/11]SQL초보에서실전전문가까지
2013-07-01
../notice/notice-content.html?num=1228&page=
[평일야간개강확정 6/25] C#,ASP.NET마스터
2013-06-20
../recruit/recruit-view.html?num=330&page=
2013-07-18
../recruit/recruit-view.html?num=329&page=
2013-07-13
../recruit/recruit-view.html?num=328&page=
2013-06-23
../recruit/recruit-view.html?num=327&page=
2013-06-12
../recruit/recruit-view.html?num=326&page=
2013-06-11
../recruit/recruit-view.html?num=325&page=
[오엔제이시스템즈]정규직 구인
2013-06-01
../recruit/recruit-view.html?num=316&page=
LG U+ 업무시스템개발
2013-04-22
사업자등록번호 :144-90-00505
통신판매업신고번호
 :2013-서울구로-0458
대표이사 :이종철
주소
 :서울 구로구 구로3동 222-8 코오롱디지털타워빌란트2차 803호 오엔제이 프로그래밍실무학원
전화 :02)851-4790
SI사업관련
 :02)851-4790
팩스
 :0505-719-4790
Copyright ⓒ

#
onjprogramming.co.kr

All Rights Reserved.

http://cafe.daum.net/fordeveloper2
../curri/m-curri-calendar.html
../recruit/recruit-01.html
javascript:window.external.AddFavorite('http://www.onjprogramming.co.kr/' ,
'오엔제이 프로그래밍실무학원');

[출처]오라클자바커뮤니티
www.oraclejavacommunity.co.kr