Database/Oracle
-
UNION두 테이블을 결합하며, 중복되지 않는 값들을 반환한다. UNION ALL두 테이블을 결합하며, 중복되는 값들도 반환한다. 즉, UNION과 UNION ALL은 두 개 이상의 테이블에서 조합된 데이터를 출력하고자 할 때 사용한다. 아래 결과는 테스트를 위해 더미 테이블을 결합한 결과이다. SELECT A.*FROM ( SELECT 1 SEQ, 'LSH' PNAME, 'M' GENDER, '01012345678' TEL FROM DUAL UNION ALL SELECT 2 SEQ, 'WBN' PNAME, 'F' GENDER, '12312345678' TEL FROM DUAL ) AUNIONSELECT B.*FROM ( SELECT 1 SEQ, 'LSH' PNAME, 'M' GENDER, '010123..
[Oracle]UNION과 UNION ALL 2018. 6. 3. -
스칼라 서브 쿼리(Scalar Subquery) 사용자가 원하는 조건의 데이터를 조회시킬 때 흔히 서브 쿼리를 사용한다.스칼라 서브 쿼리는 SELECT절에서 사용하는 서브 쿼리를 뜻한다.아래 쿼리문과 같이 스칼라 서브 쿼리는 단건의 데이터가 나와야 한다. SELECT 'QUERY TEST' A1 , ( SELECT 'SCALAR SUBQUERY' A2 FROM DUAL ) A2 FROM DUAL; 만약 데이터가 한 건이 넘는다면 에러가 난다. SELECT 'QUERY TEST' A1 , ( SELECT 'SCALAR SUBQUERY' A2 , 'ERROR COLUMN' A3 FROM DUAL ) A2 FROM DUAL; 인라인 뷰(Inline View) 인라인 뷰는 FROM절에서 사용되는 쿼리를 말한다...
[Oracle]스칼라 서브쿼리와 인라인 뷰 2018. 5. 31. -
ADD_MONTHS ADD_MONTHS 함수는 오라클에서 사용가능한 함수이며, 자신이 원하는 날짜에 특정 개월 수를 더한 값을 추출할 수 있다.용법은 다음과 같다.☞ ADD_MONTHS( 날짜, +개월 수 )쿼리 결과를 보면 이해하기 쉽다. SELECT A.DT , TO_CHAR(ADD_MONTHS(A.DT, 2),'YYYY-MM-DD') ADD_DTFROM (SELECT TO_CHAR(TO_DATE('20180530','YYYYMMDD'), 'YYYY-MM-DD') AS DT FROM DUAL) A ☞ 참고① : 2월의 경우 28일까지밖에 존재하지 않기 때문에 마지막 날로 조회가 된다. SELECT A.DT , TO_CHAR(ADD_MONTHS(A.DT, 2),'YYYY-MM-DD') ADD_DTFRO..
[Oracle]ADD_MONTHS 2018. 5. 30. -
간혹 한번에 여러 개의 데이터를 Insert 시켜야하는 경우가 있다.지금까지 많게는 2000개까지 Insert를 시킨 경험이 있는데 그런 경우 사용하는 방법이다. 다중 Insert를 할 때 오라클의 더미 테이블을 이용할 수 있는 방법이 있다.여러 데이터의 경우 시간이 걸리는 단점이 있긴하다. 자, A라는 테이블이 있다.A테이블에는 A_CD, AD_ID, SEQ_NO라는 컬럼이 존재한다.그리고 아래와 같은 자료를 삽입시켜야 한다. A_CD AD_ID SEQ_NO 1001 0000803930 1 1001 0000803930 2 1001 0000803930 3 10010000803930 4 100100008039305 1001 00008039306 1001 0000803930 7 1001 0000803930 ..
[Oracle]다중 INSERT 2018. 5. 24. -
ORA-01427 쿼리를 만들다보면 종종 마주치는 에러입니다. ORA-01427은 주로 서브쿼리에서 1건을 초과한 레코드가 나올 때 발생하는 에러입니다. 쿼리를 보면 이해가 빠를 것 같습니다. TESTDB라는 테이블이 있고 아래와 같이 데이터가 입력되어 있습니다. 자, 이제 에러가 나는 쿼리문을 보겠습니다. WITH TESTDB AS( SELECT '20123153' CODE, '이승현' CODENM, 'Y' USE_YN FROM DUAL UNION ALL SELECT '20156121' CODE, '박민서' CODENM, 'Y' USE_YN FROM DUAL UNION ALL SELECT '20143328' CODE, '최유진' CODENM, 'Y' USE_YN FROM DUAL UNION ALL SE..
[Oracle]ORA-01427 : 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다 2018. 5. 15. -
MONTHS_BETWEEN(SYSDATE, ColumnA) MONTHS_BETWEEN 함수는 월 단위로 날짜 연산을 하는 함수이다.SYSDATE(현재 날짜)를 기준으로 ColumnA(입력 날짜)와 몇 개월의 차이가 나는지를 구한다.아래 쿼리문을 통해 이해해보자.(ENTER_YMD : 입사일, ENTER_YMD2 : 개월 차이) SELECT EMP_ID , EMP_NM , ENTER_YMD , MONTHS_BETWEEN(SYSDATE, ENTER_YMD) AS ENTER_YMD2FROM A; 결과를 보면 소수점이 생기는 것을 확인할 수 있다. 개월 수를 나누어 년수로 바꾸고 TRUNC를 이용해 소수점을 깔끔하게 해주자.(반올림이 필요하다면 ROUND 처리를 해줘도 될 것 같다) SELECT EMP_ID ,..
[Oracle]MONTHS_BETWEEN 2018. 5. 15. -
오전에 프로그램을 하나 수정하면서 발견한 오류 ORA-01006검색 결과, Java에서 ? 에 값이 없거나 잘 못 들어가는 경우 생기는 오류라고 한다.. 디버깅 과정을 거쳐보니 xml에 주석을 달았던 것이 문제였다.지금 프로그램은 xml에서 바인드 변수(:)를 이용해 java단으로부터 특정 값들을 받아오고 있다.문제가 발생한 이유는 조건절을 주석으로 막아놔서 java단에서는 값이 넘어오는 데 그 값을 처리못해 생긴 오류였다. 아래는 문제의 조건절..(테이블명만 임의로 수정했다) WHERE A.조건='Y'AND B.조건 IN( SELECT 조건 FROM C WHERE C조건='Y' AND C조건 AND (C.조건=NVL(:값1, 값2) OR C.조건2=NVL(:값1, 값2)) ) 다음부터 조심하자. +피드..
[Oracle]ORA-01006 : 바인드 변수가 없습니다 2018. 5. 15. -
취업 후에 DB를 만지는 일이 더 많아진 것 같다.. Outer Join(외부조인) Outer Join은 Inner Join에 반대되는 개념이다.Inner Join은 조인 조건절을 만족하는 레코드만 출력을 시키지만 Outer Join은 조건절을 만족하지 않는 레코드도 출력을 시키며 조인되는 해당 컬럼의 값은 Null로 표시된다. 오라클에서 Outer Join을 사용하는 경우 흔히 (+)연산자를 사용한다. 이해를 확실히 하기 위해 간단한 쿼리를 만들어 테스트하였다. SELECT A.A, A.B, B.A, B.BFROM ( SELECT '1' A, 'TEST_A' B FROM DUAL UNION ALL SELECT '2' A, 'TEST_B' B FROM DUAL UNION ALL SELECT '3' A, ..
[Oracle]Outer Join(외부조인) 2018. 5. 2.