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

오류 사항을 아무리 검색해봐도 나오지 않고
뭐 이 단계에서 해당 체인이 있는지 여부를 확인하라고 하는데 뭔 말인지 모르겠었다.

우선 나의 경우 오류가 발생한 원인은
MERGE INTO를 사용할 때
WHEN MATCHED THEN
UPDATE
SET
문에서 SET에 PRIMARY KEY가 포함되어 있어서 오류가 발생했다.

PRIMARY KEY를 제외하고 돌리니 정상적으로 실행이 되었다.


728x90
728x90
728x90

테이블은 PK, FK등으로 연결이 되어 있는 경우가 많다.
예를들어 사원테이블(EMPNO(PK),DEPTNO(FK))가 있고 부서테이블(DEPTNO(PK),DEPTNM)이 있을 경우
사원테이블의 DEPTNO 부서코드에 추가하려는 내용이 부서테이블에 존재하지 않을 경우 위와 같은 오류가 발생한다

정확히 확인하기 어려울 때는 
ALL_CONSTRAINTS에 %s에 해당하는 내용을 CONSTRAINT_NAME에 WHERE절로 조건을 검색하면 부모키가 없습니다에 해당하는 TABLE을 찾을 수 있다.
TABLE에 추가하려는 키가 존재하는지 여부를 확인해주면 된다

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
728x90

예제로 하나 먼저 보여주자면
TO_CHAR('12','FM99')
이렇게 사용이 된다

* FM 에서
- 9 :: 내용이 없다면 그냥 생략
- 0 :: 내용이 없더라도 포함해서 자리수 만들어주기 ( 소수점에서 0도 내용이 없다고 판단 )

예시
1) 2 ▶ 'FM9900' , 'FM0099'

SELECT TO_CHAR('2','FM9900'),TO_CHAR('2','FM0009')
FROM DUAL


0이 2번째자리까지 있으니 02로 나오고
0이 4번째자리까지 있으니 0002로 나오게 된다

2) 5 ▶ 'FM0.9', 'FM9.0'

SELECT TO_CHAR('5','FM0.9') , TO_CHAR('5','FM9.0')
FROM DUAL


소수점 아래로 내용이 없으니 5.
상관없이 나와야하니 5.0

3) 0.12 ▶ 'FM09.99', 'FM90.99', 'FM99.99'

SELECT TO_CHAR('0.12','FM09.99'), TO_CHAR('0.12','FM90.99'), TO_CHAR('0.12','FM99.99')
FROM DUAL


소수점 위 두번째 자리까지 존재하니 00.12
소수점 위 첫번째 자리까지 존재하니 0.12
소수점 위에는 없으니 .12

728x90
728x90
728x90

SEQUENCE

- 생성 및 확인

maxvalue, minvalue를 선언하지 않고 사용해도 된다
사실상 거의 나는 선언하지 않고 사용했었다

maxvalue는 start with, minvalue보다 크고 정수일 경우 최대 28자리까지 지원해주는걸로 알고 있다 

minvalue는 maxvalue보다 작아야하고 start with보다 커야한다

 

- 수정

-초기화 (= 삭제)

 

(사용 예)


SYNONYM

 

 

EMPLOYEES라는 테이블을 "사원들"이라고 alias 하면 그렇게 사용할 수 있다는 뜻이다

728x90

+ Recent posts