728x90
728x90

 

단순하게도 .. 뭔가 하나 빠져있거나 추가 되었을 때 이런 오류가 나타난다

예를들면 나의 경우 SELECT 절에 맨 마지막으로 불러오는 항목에 쉼표(,)를 붙여서

위 오류가 발생했다!

추가적으로 ,,0이렇게 되었을 때도 오류가 나왔다

 

한번 짝이 다들 맞나 쉼표가 더 들어간 곳은 없나 확인해보길!!!

728x90
728x90
728x90

 

위 오류가 나타나는 이유는 계층식 구조에서 A에서 A로 다시 이동하는 부분이 존재하다보니

계속해서 돌고도는 현상이 발생하여 나오는 오류이다!

UPPER_EMPNO = EMPNO로 연결 해놓았을 경우 어떤 한 행의 UPPER_EMPNO와 EMPNO가 동일한 부분이 없는지 확인해보면 된다!

 

나같은 경우는 PRIOR로 되어 있어서 저 오류가 계속 났었는데 찾기 위해 NOCYCLE로 해놓으니 순환되지 않는 상태에서 멈춰서 확인할 수 있었다

 

모두 오류 찾기 성공하시길..

 

 

728x90
728x90
728x90

하^^ 한번 날아가고 다시 쓰는 글.. 슬프네요.. 
임시저장 하지 않은 나. 정신 차려.

ROWNUM이랑 ROW_NUMBER()에 대해 알아볼 예정인데요
둘의 차이가 뭐인지도 같이 예시로 다뤄보도록 하겠습니다!!

우선, ROWNUM
이건 FROM과 WHERE절을 읽고 그다음 조회된 값들에 번호를 부여하는 형식으로 되어 있습니다

SELECT ROWNUM, ENO,ENAME,DNO
    FROM EMP
   WHERE DNO IN ('01','10','20')

조회된 값에 1번부터 시작해서 번호가 부여된걸 확인이 가능합니다!
근데 여기서 문제점...!!!!! 바로바로 FROM, WHERE 절만 읽고 부여하다보니 ORDER BY를 현재 보여지는 조회와 다를 경우
ROWNUM은 엉망진창으로 보일 수가 있어요

SELECT ROWNUM, ENO,ENAME,DNO
    FROM EMP
   WHERE DNO IN ('01','10','20')
   ORDER BY DNO

특히나 GROUP BY 절을 이용해서 부서별 인원에 순번을 정해주는 이런걸 만들어줄 경우에는 이렇게 ROWNUM이 되어 있으면 완전,, 망하는거죠

저는 ROWNUM을 잘 사용하지 않는 편이고, 사용해도 테이블에 있는 값과 거의 동일하게 INSERT 해줄때 가끔 사용하고 있습니다

INSERT INTO 테이블 A
SELECT B.a, B.b, '수정'
  FROM 테이블 B
 WHERE ROWNUM = 1

이런식으로 ROWNUM에서 1만 불러와서 동일하게 넣어주고 수정할 부분의 컬럼 값만 바꿔주는거죠
굳이 다른 컬럼의 값을 제가 직접 입력할 필요가 없어서 이 부분은 사용하실 때 효율적이세요!!

이번엔 ROW_NUMBER()에 대해 알아봅니다!
ROW_NUMBER()는 OVER()과 함께 사용이 됩니다
형식은 ROW_NUMBER() OVER(PARTITION BY ~ ORDER BY ~) 입니다
*PARTITION BY는 GROUP BY와 동일하게 생각해주시면 됩니다!

만약 OVER를 사용하지 않으시게 된다면 ORA-30484:이 함수에 대한 윈도우 지정이 없습니다 라는 오류가 발생하게 돼요
OVER 내에는 ORDER BY는 단독으로 사용이 가능하나 PARTITION BY는 단독으로 사용이 불가능해보입니다
ORDER BY를 사용하라고 안내 메세지가 나오기 때문이죠!!

SELECT ROW_NUMBER() OVER(ORDER BY DNO), ENO,ENAME,DNO
    FROM EMP
   WHERE DNO IN ('01','10','20')
   ORDER BY DNO

ORDER BY만 사용하였을 때 예시입니다
부서로 정렬된 상태로 번호가 부여된 것을 확인하실 수 있습니다!

이때 만약 부서별로 순번을 부여 하고 싶으실 경우에는 사용하지 않은 PARTITION BY를 사용해주시면 됩니다!

SELECT ROW_NUMBER() OVER(PARTITION BY DNO ORDER BY DNO), ENO,ENAME,DNO
    FROM EMP
   WHERE DNO IN ('01','10','20')
   ORDER BY DNO

유용하죠? ㅎㅎㅎ 이걸 응용하여 많은 곳에 사용하시길 바랍니다~~~( •̀ ω •́ )✧

728x90
728x90
728x90

 

이미 SQL 내에서 사용 정의가 내려져 있는 단어 , 문자들이 있습니다!

이걸 사용하게 되면 sql에서는 오류로 뱉어내는 경우가 많기 때문에 혹시

ORA-01756 단일 인용부를 지정해 주십시오.라는 오류가 발생할 경우 의심해주세요!

 

''를 두번 사용하게 되면 '가 '를 감싸주어 '하나만 나오게 됩니다.

SELECT '''' FROM DUAL

위와 같이 사용해주셔야 합니다!

JAVA 에서는 \를 붙여서 사용해주셔야 ' 사용이 가능한점 추가로 안내 드릴게욤 ㅎㅎㅎ

 

 

728x90
728x90
728x90

 

이 경우 여러개의 행이 존재하여 UPDATE문에 넣을 때 어떤걸 넣어야 하는지 컴퓨터가 알지 못하기 때문에

조건이 부족하다는 에러이다.

(UPDATE 문 뿐이 아니라 다른 곳에서도 나올 확률이 있는데 대부분 UPDATE 문에서 나올 확률이 커서 UPDATE문이라고 말했다.)

확인을 해보면 조건이 덜 들어갔을 확률이 크니 이 부분을 잘 확인해보자!!

 

나같은 경우는 

MERGE INTO 화면에서 ON 절에 PK 하나 넣어주지 않아서 이런 오류가 발생했다

 

728x90
728x90
728x90

1) JOIN 할 때
TABLE A,
TABLE B
라고 설정해줘야 하는데 B를 쓰지 않고
JOIN절에 A.COLUMN = B.COLUMN을 쓰니 인식이 되지 않아
위와 같은 오류가 발생하였다

 

2) COLUMN 명이 틀려서 오류가 발생했다.


식별자를 사용했을 때 이게 정상적으로 연결이 되는 부분인지 확인을 해줘야 하는 오류다!

728x90
728x90
728x90

FROM 절 위나 SELECT 중간에 ENTER키로 인하여 공백이 있다거나
아니면 , 등으로 이어주지 않아서 이러한 오류가 발생할 수 있다

 

나 같은 경우는 SELECT A B로 적어줘서 SELECT A, B로 하니 오류가 사라졌다

728x90
728x90
728x90

CREATE TABLE TABLE명
SELECT *
FROM TABLE 명 

나같은 경우는 CREATE와 SELECT 사이에 AS 가 들어가야 하나 들어가지 않아서 이러한 오류가 발생했다

INSERT INTO VALUES등과 같이 들어가야 하나 들어가지 않은 부분이 있을 경우 이러한 오류가 발생될 수 있으니 한번 확인해보자!

728x90
728x90
728x90

 

MS-SQL같은 경우는 DATEDIFF 같은 함수가 존재하여 차이를 구할 수 있다고 하는데
ORACLE은 함수가 존재하지 않아 계산을 해줘야 한다.

 

[그림1]을 참고하여 설명을 해보도록 하겠다

TO_DATE를 이용해서 우선 이게 날짜 함수라는걸 인식하게 해준다.
TO_DATE이 형식을 우선 정리하자면 아래와 같다.
 - YYYY : 년도
 - MM   : 월
 - DD    : 일
 - HH24/ HH : 시간
 - MI     : 분
 - SS     : 초

이걸 이용해서 시간 차이를 구해주면 된다

TO_DATE를 이용하여 시간을 빼주는데 이때 나온 결과 값에 * 24를 해줘야 하루 24시간에 맞춰 총 시간을 알 수 있다.
여기에 1시간이 60분이니 * 60을 해주면 총 몇분인지 알 수 있고
*60을 추가로 더 해주면 총 몇초인지 알 수 있게 된다.

728x90
728x90

예를들어
CASE WHEN 조건 THEN (RETURN VARCHAR 값) ELSE (RETURN NUMBER 값) END
로 하였을 경우 THEN 과 ELSE 내의 RETURN 하는 자료형이 맞지 않아 이러한 오류가 발생한다
데이터 유형이 일관해야 하므로 RETURN VARCHAR에 TO_NUMBER을 해주거나 
RETURN NUMBER에 TO_CHAR을 사용하여 넣어주면 된다

 

자료형이 일치하는지를 우선적으로 보면 해결되는 SQL 오류!

728x90

+ Recent posts