<input name='input이름' id='input id' value='값'>
</form>
Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0
pom.xml에서
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
maven 에러 Missing artifact com.sun.jdmk:jmxtools:jar:1.2.1 (0) | 2015.04.01 |
---|---|
Maven pom.xml dependency를 가진 대상의 scope설정 (0) | 2015.04.01 |
Bean 객체 스캔 (0) | 2015.03.31 |
Annotation (0) | 2015.03.31 |
Spring Framework 모듈 (0) | 2015.03.17 |
ArtifactTransferException: Failure to transfer com.sun.jdmk:jmxtools:jar:1.2.1 from https://maven-repository.dev.java.net/nonav/repository was cached in the local repository, resolution will not be reattempted until the update interval of java.net has elapsed or updates are forced. Original error: Could not transfer artifact com.sun.jdmk:jmxtools:jar:1.2.1 from/to java.net (https://maven-repository.dev.java.net/nonav/repository): No connector available to access repository java.net (https://maven-repository.dev.java.net/nonav/repository) of type legacy using the available factories AetherRepositoryConnectorFactory, WagonRepositoryConnectorFactory
Missing artifact com.sun.jdmk:jmxtools:jar:1.2.1
구글링 하면서 라이센스문제라는거 같아서
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
문구 추가하라고 헀지만 ㅡㅡ 이미 추가했었음 ...
<repository>
<id>repository.jboss.org-public</id>
<name>JBoss repository</name>
<url>https://repository.jboss.org/nexus/content/groups/public</url>
</repository>
추가 해보라고 해서 했지만 달라지는게 없었음...
결론은
maven에서의 log4j의 의존관계 문제란다.... ㅡㅡ;;
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
1.2.15버전을 사용하면 생기는 문제임 ~ 1.2.14버전으로 고쳐주니 에러가 사라지네요~
Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0 오류 (0) | 2015.04.02 |
---|---|
Maven pom.xml dependency를 가진 대상의 scope설정 (0) | 2015.04.01 |
Bean 객체 스캔 (0) | 2015.03.31 |
Annotation (0) | 2015.03.31 |
Spring Framework 모듈 (0) | 2015.03.17 |
scope 설정 종류
⒜ compile : scope 설정의 default 값으로 되어있다. test 및 runtime 에도 클래스 패스에 포함된다.
⒝ provided : 컴파일 시에 필요. JDBC 드라이버 등이 예가 된다. 컴파일 시에는 필요하지 않지만, 실행 시에 필요한 경우
⒞ runtime : 런타임에 필요 JDBC 드라이버 등이 예가 된다. 컴파일 시에는 필요하지 않지만 실행 시에 필요한 경우
⒟ test : 테스트 코드를 컴파일 할떄 필요 테스트시 클래스 패스에 포함되며, 배포시 제외된다.
⒠ system : 명시적으로 해당 JAR를 포함하는 것이 제공되어야 한다는 것을 제외하고 provided와 유사함, artifact는 항상 사용가능하며 레파지토리에서 검색하지 않음
⒡ import (Maven 2.0.9 이후에서 적용) : 이 영역은 <dependencyManagement> 에서 pom의 의존관계에 대해서 사용되므 지정된 POM이 해당 POM의 <dependencyManagement> 영역에 있는 의존관계로 대체됨을 의미함, 이것들이 대체되기 떄문에 import영역의 의존관계들을 실질적으로 의존에 대한 제약에 대해 관여하지 않음.
예)
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
*출처 : http://homo-ware.tistory.com/43,
http://egloos.zum.com/laydios/v/2789441
Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0 오류 (0) | 2015.04.02 |
---|---|
maven 에러 Missing artifact com.sun.jdmk:jmxtools:jar:1.2.1 (0) | 2015.04.01 |
Bean 객체 스캔 (0) | 2015.03.31 |
Annotation (0) | 2015.03.31 |
Spring Framework 모듈 (0) | 2015.03.17 |
1) 설정 파일에 <context:component-scan> 태그의 base-package 속성으로 지정된 패키지 내의 클래스를 검색하여 자동으로 빈으로 등록하는 기능을 제공
⒜ xml 설정 파일에 여러 빈 정보를 추가하지 않고 특정한 클래스를 빈으로 등록 가능
⒝ <context:component-scan base-package:"com.bosung" />
2) 스프링 2.0이후
⒜ @Repository
3) 스프링 2.5이후
⒜ @Component
⑴ org.springframework.stereotype.Component
⑵ 자동으로 빈으로 등록되게 함
⑶ 빈의 이름은 첫 문자만 소문자이고 나머지는 클래스 이름과 동일
⑷ 빈의 이름을 지정해 주려면 @Component("myFoo");
⑸ @Scope("prototype")으로 빈의 범위를 지정할 수 있음
org.springframework.context.annotation.Scope
⒝ @Service
⒞ @Controller
maven 에러 Missing artifact com.sun.jdmk:jmxtools:jar:1.2.1 (0) | 2015.04.01 |
---|---|
Maven pom.xml dependency를 가진 대상의 scope설정 (0) | 2015.04.01 |
Annotation (0) | 2015.03.31 |
Spring Framework 모듈 (0) | 2015.03.17 |
Spring Framework 특징 (0) | 2015.03.17 |
1) @Required
⒜ org.springframework.bean.factory.annotation.Required
⒝ 속성 또는 setter 메서드에 필수 속성이 되게함
2) @Autowired
⒜ org.springframework.bean.factory.annotation.Autowired
⒝ 속성, 생성자, setter메서드 타입에 의존하는 객체를 삽입해 줌
3) @Qualifier
⒜ org.springframework.bean.factory.annotation.Qualifier
⒝ @Aurowired 와 같이 사용
⒞ 같은 타입의 빈 객체들이 있을 경우 특정 빈을 사용하도록 함
⒟ 설정파일의 <qualifier> 태그의 value 속성의 값을 애노테이션 값으로 사용
<bean id="foo" class="x.y.foo">
<qualifier value ="action" />
@Qualifier
public void setFoo(@Qualifier("action") Foo foo) {}
4) @Resource
⒜ javax.annotation.Resource
⒝ 필요한 자원을 자동으로 연결시켜 줌
⒞ name 속성을 이용하면 속성과 이름이 틀릴 때 사용
@Resource(name="myFoo")
5) @PostConstruct, @PreDestroy
⒜ javax.annotation.PostConstruct,javax.annotation.PreDestroy;
⒝ lifecycle 애노테이션
maven 에러 Missing artifact com.sun.jdmk:jmxtools:jar:1.2.1 (0) | 2015.04.01 |
---|---|
Maven pom.xml dependency를 가진 대상의 scope설정 (0) | 2015.04.01 |
Bean 객체 스캔 (0) | 2015.03.31 |
Spring Framework 모듈 (0) | 2015.03.17 |
Spring Framework 특징 (0) | 2015.03.17 |
예제 테이블
CREATE TABLE TEST(
A VARCHAR2(10),
B VARCHAR2(10)
);
INSERT INTO TEST VALUES ('2','516958');
INSERT INTO TEST VALUES ('1','123458');
INSERT INTO TEST VALUES ('1','123458');
INSERT INTO TEST VALUES ('1','458512');
INSERT INTO TEST VALUES ('2','468521');
INSERT INTO TEST VALUES ('2','735196');
INSERT INTO TEST VALUES ('1','794528');
RANK() 함수와 ROW_NUMBER() 함수 정의
RANK() 정의
RANK() 함수는 레코드 단위로 순차적으로 순위 (1부터 출력)를 부여하고
레코드 단위로 같은 값에 대해서는 동일한 순위를 부여한다.
PARTIRION BY 를 사용하면 전체를 한 그룹으로 보는것이 아니라 PARTITION BY 에 사용된
컬럼을 지준으로 다르게 그룹을 나누어 순위를 부여한다.
오라클 8i 부터 지원하는 분석함수
공동순위가 있으므로 순위에 비는 숫자가 생깁니다.
중복 값을 허용 하면서 비는 숫자를 없애려면
DENSE_RANK() 사용하면 된다.
RANK() 사용 예제
SELECT A, B, RANK() OVER(ORDER BY A, B) 순위 FROM TEST;
전체
A B 순위
1 123458 1
1 123458 1
1 458512 3
1 794528 4
2 468521 5
2 516958 6
2 735196 7
SELECT A, B, RANK() OVER(PARTITION BY A ORDER BY A, B) 순위 FROM TEST;
PARTITION BY 적용 A 컬럼을 기준으로 그룹을 나눔
A B 순위
1 123458 1
1 123458 1
1 458512 3
1 794528 4
2 468521 1
2 516958 2
2 735196 3
ROW_NUMBER() 정의
ROW_NUMBER() 는 레코드 단위로 동일한 값이라도 매번 새로운 순위를 부여한다.
ROW_NUMBER() 함수는 각 PARTITION 내에서 ORDER BY 절에 의해
정렬된 순서로 유일한 값을 돌려주는 함수이면 ROWNUM 과는 관계가 없습니다.
오라클 8i 부터 지원하는 분석 함수
중복 순위가 없고 모든 값은 유일값을 가지게 된다.
SELECT A, B, ROW_NUMBER () OVER (ORDER BY A, B) 순번 FROM TEST;
전체
A B 순번
1 123458 1
1 123458 2
1 458512 3
1 794528 4
2 468521 5
2 516958 6
2 735196 7
SELECT A, B, ROW_NUMBER() OVER(PARTITION BY A ORDER BY A, B) 순번 FROM TEST;
PARTITION BY 적용 A 컬럼을 기준으로 그룹을 나눔
A B 순번
1 123458 1
1 123458 2
1 458512 3
1 794528 4
2 468521 1
2 516958 2
2 735196 3
NTILE () 정의
NTILE 함수는 쿼리의 결과를 N개의 그룹으로 분류하는 기능을 제공
SELECT A, B,
NTILE(2) OVER (ORDER BY A) 그룹1,
NTILE(3) OVER (ORDER BY A) 그룹2,
NTILE(5) OVER (ORDER BY A) 그룹3
FROM TEST;
결과 값 :
A | B | 그룹1 | 그룹2 | 그룹3 |
1 | 794528 | 1 | 1 | 1 |
1 | 123458 | 1 | 1 | 1 |
1 | 458512 | 1 | 1 | 2 |
1 | 123458 | 1 | 2 | 2 |
2 | 735196 | 2 | 2 | 3 |
2 | 516958 | 2 | 3 | 4 |
2 | 468521 | 2 | 3 | 5 |
* OVER() 함수는 필수 입니다.
* OVER() 함수안의 PARTITION BY 는 미필수 이지만 ORDER BY는 필수 이다.
* PARTITION BY 를 사용하면 출력결과를 하나의 그룹으로 보는것이 아니라
PARTITION BY 에 사용된 컬럼을 기준으로 그룹을 나누어지게 된다.
(순위도 그룹별로 별개로 1부터 부여된다.)
ROW_NUMBER() 응용 예제
A, B 그룹별 A, B 의 출력을 상위 2개만 출력하기
SELECT A, B FROM(
SELECT A, B, ROW_NUMBER() OVER (PARTITION BY A ORDER BY B) 전체 FROM TEST)
WHERE 전체 <= 2;
결과 값 :
A B
1 123458
1 123458
2 468521
2 516958
SELECT A, B FROM (
SELECT A, B, ROW_NUMBER() OVER (PARTITION BY A ORDER BY A, B) "중복 제외"
FROM TEST GROUP BY A, B) WHERE "중복 제외" <= 2;
결과 값 :
A B
1 123458
1 458512
2 468521
2 516958
ROW_NUMBER 응용예제 2
직업별로 급여 합계를 계산해서 급여 합계가 많은 순으로 가장 많은 직업 3개만 출력하기
ROW_NUMBER 사용 안할시
SELECT JOB, "급여 합계" FROM
(
SELECT JOB, SUM(SAL) "급여 합계" FROM EMP
GROUP BY JOB
ORDER BY "급여 합계" DESC
)
WHERE ROWNUM < 4;
ROW_NUMBER 사용
SELECT JOB, "급여 합계" FROM
(
SELECT JOB, SUM(SAL) "급여 합계",
ROW_NUMBER() OVER (ORDER BY SUM(SAL) DESC) NUM
FROM EMP
GROUP BY JOB
)
WHERE NUM < 4;
결과 값 :
JOB 결과 합계
MANAGER 8275
ANALYST 6000
SALESMAN 5600
PARTITION BY
PARTITION BY는 select한 결과를 특정 column을 기준으로 나누는 역할을 한다. 여기서는 userid를 기준으로 partition을 나눴다. 그리고 나뉜 partition은 score column을 기준으로 내림차순으로 정렬을 하고, 정렬된 내용을 RANK() OVER를 통해 순서를 매긴다. 마지막으로 한 번 더 select하여 상위 3개를 가져온다
오라클 PK 제약조건 만들기 (0) | 2015.03.19 |
---|---|
오라클 DDL 정의 (0) | 2015.03.19 |
오라클 AUTO_INCREMENT (인서트 자동증가) (0) | 2015.03.19 |
날짜 명령어 사용 예 (0) | 2015.03.16 |
날짜관련 명령어 (0) | 2015.03.16 |
테스트 환경
CREATE TABLE STUDENT (
"SID" NUMBER,
"NAME" VARCHAR2(32),
"EMAIL" VARCHAR2(32)
);
INSERT INTO STUDENT VALUES (582812, '한놈', 'a@a.a');
INSERT INTO STUDENT VALUES (582812, '한놈', 'hannom@example.com');
INSERT INTO STUDENT VALUES (582812, '한놈', 'b@b.b');
INSERT INTO STUDENT VALUES (241234, '두식이', 'dusigi@example.com');
INSERT INTO STUDENT VALUES (241234, '두식이', '');
INSERT INTO STUDENT VALUES (372342, '석삼', 'seoksam@example.com');
문제 상황
기본키가 없는 테이블 STUDENT 에서 SID 를 기본키로 하고 싶다.
ALTER TABLE STUDENT ADD CONSTRAINT SID_PK PRIMARY KEY (SID);
SQL 오류: ORA-02437: (SCOTT.SID_PK)을 검증할 수 없습니다 - 잘못된 기본 키입니다.
중복값 확인
SELECT *
FROM (SELECT SID, COUNT(SID) CNT FROM STUDENT GROUP BY SID)
A WHERE CNT >1;
SID CNT
582812 3
241234 2
* SID 에 중복 값이 있다.
중복값 제거
방법 1) 최근 것을 남김
SID 별 입력 역순 조회
SELECT ROWID,
RANK() OVER(PARTITION BY SID ORDER BY ROWID DESC) RNK,
STUDENT.*
FROM STUDENT;
ROWID RNK SID NAME EMAIL
AAASSdAAEAAAAKtAAE 1 241234 두식이 NULL
AAASSdAAEAAAAKtAAD 2 241234 두식이 dusigi@example.com
AAASSdAAEAAAAKtAAF 1 372342 석삼 seoksam@example.com
AAASSdAAEAAAAKtAAC 1 582812 한놈 b@b.b
AAASSdAAEAAAAKtAAB 2 582812 한놈 hannom@example.com
AAASSdAAEAAAAKtAAA 3 582812 한놈 a@a.a
RNK 가 2이상인 것듯을 삭제할 것이다.
삭제 대상 확인
SELECT * FROM STUDENT
WHERE ROWID IN
(SELECT ROWID FROM(SELECT ROWID,
RANK() OVER (PARTITION BY SID ORDER BY ROWID DESC)RNK,
STUDENT.* FROM STUDENT)
WHERE RNK > 1);
SID NAME EMAIL
241234 두식이 dusigi@example.com
582812 한놈 hannom@example.com
582812 한놈 a@a.a
삭제 후 결과 확인
DELETE FROM STUDENT
WHERE ROWID IN
(SELECT ROWID FROM(SELECT ROWID,
RANK() OVER(PARTITION BY SID ORDER BY ROWID DESC) RNK,
STUDENT.* FROM STUDENT)
WHERE RNK > 1);
* 3개행이 삭제 되었습니다.
SELECT * FROM STUDENT;
SID NAME EMAIL
582812 한놈 b@b.b
241234 두식이 NULL
372342 석삼 seoksam@example.com
방법2) 잘 입력된 것을 남김
EMAIL 이 잘 입력된 순으로 조회
SELECT ROWID,
RANK() OVER(PARTITION BY SID ORDER BY LENGTH(EMAIL) DESC NULLS LAST,
ROWID DESC) RNK, STUDENT.* FROM STUDENT;
ROWID RNK SID NAME EMAIL
AAASSfAAEAAAAK1AAD 1 241234 두식이 dusigi@example.com
AAASSfAAEAAAAK1AAE 2 241234 두식이 NULL
AAASSfAAEAAAAK1AAF 1 372342 석삼 seoksam@example.com
AAASSfAAEAAAAK1AAB 1 582812 한놈 hannom@example.com
AAASSfAAEAAAAK1AAC 2 582812 한놈 b@b.b
AAASSfAAEAAAAK1AAA 3 582812 한놈 a@a.a
RNK 가 2이상인 것들을 삭제할 것이다.
삭제 대상 확인
SELECT * FROM STUDENT
WHERE ROWID IN (SELECT ROWID FROM(SELECT ROWID,
RANK() OVER(PARTITION BY SID ORDER BY LENGTH(EMAIL) DESC NULLS LAST,
ROWID DESC) RNK, STUDENT.* FROM STUDENT)
WHERE RNK > 1);
SID NAME EMAIL
582812 한놈 a@a.a
241234 두식이 NULL
582812 한놈 b@b.b
삭제 후 결과 확인
DELETE FROM STUDENT
WHERE ROWID IN (SELECT ROWID FROM(SELECT ROWID,
RANK() OVER(PARTITION BY SID ORDER BY LENGTH(EMAIL) DESC NULLS LAST,
ROWID DESC) RNK, STUDENT.* FROM STUDENT)
WHERE RNK >1 );
*3개 행이 삭제 되었습니다.
SELECT * FROM STUDENT;
SID NAME EMAIL
582812 한놈 hannom@example.com
241234 두식이 dusigi@example.com
372342 석삼 seoksam@example.com
PK 제약조건 생성 테스트
이제 중복값이 없어 아래 SQL 문을 오류없이 실행할수 있다.
ALTER TABLE STUDENT ADD CONSTRAINT SID_PK PRIMARY KEY (SID);
* table STUDENT이(가) 변경되었습니다.
출처 : http://zetawiki.com/
오라클 분석함수 -- 순위함수 (0) | 2015.03.20 |
---|---|
오라클 DDL 정의 (0) | 2015.03.19 |
오라클 AUTO_INCREMENT (인서트 자동증가) (0) | 2015.03.19 |
날짜 명령어 사용 예 (0) | 2015.03.16 |
날짜관련 명령어 (0) | 2015.03.16 |
DDL (Data Definition Language) : 데이터와 그 구조 정의 = 테이터 정의어
TABLE 정의
행과 열로 구성된 기본적인 저장매체의 단위
TABLE CREATE 주의사항
1. 테이블 이름을 지정하고 각 컬럼들은 괄호 ( ) 로 묶어 지정합니다.
2. 컬럼뒤에 데이터 타입은 꼭 지정되어야 합니다.
3. 각 컬럼들은 콤마 , 로 구분되고, 항상 끝은 세미콜론 ; 으로 끝납니다.
4. 한 테이블 안에서 컬럼이름은 같을 수 없을며 다른 테이블에서의 컬럼 이름과는 같을수 있습니다.
5. 테이블명을 쌍따옴표 " " 로 감싸지 않으면 기본적으로 대문자로 생성되며
감싸면 입력한 그대로 생성이 된다.
TABLE CREATE 특이사항
1. 오라클에서는 테이블 생성시 컬럼을 1000개까지 생성이 가능하다.
2. 오라클에서는 테이블 생성 후 커밋 커리된다.
TABLE CREATE 명령
CHECK 제약 조건 : 컬럼에 입력되는 값을 체크함
컬럼 CHAR(1) CHECK (컬럼 = '0' OR 컬럼 = '1') ;
-- 데이터 삽입시 값을 체크해서 거짓이면 에러 발생
예제1)
CREATE TABLE TEST1
(AA CHAR(1) CHECK (AA = '0' OR AA = '1'));
-- 테이블 생성후 AA 컬럼에 문자열 2를 입력하면 에러 발생
예제2)
A CHAR(13) CHECK (컬럼 LIKE '____-__-__')
-- A 컬럼에 'YYYY-MM-DD' 형식으로만 입력가능
DEFAULT 제약조건 : 컬럼에 값이 입력 안될떄 자동으로 입력되는 값
예제1)
CREATE TABLE TEST3
(
A DATE DEFAULT SYSDATE,
B CHAR(10)
);
COMMIT;
INSERT INTO TEST3 (B) VALUES ('A') --날짜, A 입력됨
INSERT INTO TEST3 (A, B) VALUES (NULL, 'A') -- NULL 값, A 입력됨
INSERT INTO TEST3 (A, B) VALUES ('', 'A') -- NULL값, A 입력됨
TABLE CREATE EXAMPLE
예제1) PRIMARY KEY 생성 하지 않을시
CREATE TABLE A(
ID NUMBER(10),
NAME VARCHAR2(30)
);
예제2) PRIMARY KEY 생성
CREATE TABLE B(
ID NUMBER(10) CONSTRAINT B_ID PRIMARY KEY,
NAME VARCHAR(30)
);
-- CONSTRAINT 이용해서 PRIMARY KEY 이름을 정할수 있다.
이름을 임으로 정하고 싶다면 적지 않아도 된다.
예제3) 제약 조건을 이용하지 않고 PRIMARY KEY 생성
CREATE TABLE C(
ID NUMBER(10),
NAME VARCHAR(30),
CONSTRAINT C_ID PRIMARY KEY (ID)
);
TABLE COPY
같은 계정에서의 TABLE COPY
TABLE A 가 있고 TABLE B 를 생성하면서 복사하는 방법,
하지만 제약조건(PRIMARY KEY, UNIQUE) 등은 별도로 해줘야 한다.
CREATE TABLE B AS SELECT * FROM A;
* B TABLE 을 만든 후 A TABLE 의 모든 데이터를 B TABLE 에 입력한다.
같은 서버에서 다른 계정으로 TABLE COPY (SYSTEM 계정에서 실행해야 한다.)
제약조건(PRIMARY KEY, UNIQUE) 등은 별도로 해줘야 한다.
CREATE TABLE SCOTT.B AS SELECT * FROM SC.A;
오라클 분석함수 -- 순위함수 (0) | 2015.03.20 |
---|---|
오라클 PK 제약조건 만들기 (0) | 2015.03.19 |
오라클 AUTO_INCREMENT (인서트 자동증가) (0) | 2015.03.19 |
날짜 명령어 사용 예 (0) | 2015.03.16 |
날짜관련 명령어 (0) | 2015.03.16 |