[SQL] Oracle 에러 메시지

JoJo·2023년 5월 16일
0
post-custom-banner

💡 1. ORA-00001: unique constraint violated.


✔️ 발생 원인

유일성(unique) 제약 조건이 위배

Uniqe Key , Primary Key 와 같은 테이블에 하나만 들어가야 하는 값들 중 하나가 해당 키에 데이터가 들어가있는데 중복해서 INSERT를 사용하면 발생하는 에러


✔️ 해결 방안

기본키에 해당하는 이미 존재하는 데이터와 중복을 피해서 INSERT 및 UPDATE

ex.
-- ORA-00001 오류 발생
INSERT INTO PRODUCT VALUES(1001, 'USER01');

-- SQL문 수정
INSERT INTO PRODUCT VALUES(1004, 'USER01');

해당 컬럼 제약조건 삭제

ex.
ALTER TABLE AB DROP CONSTRAINT SYS_C007143(제약조건 이름);



💡2. ORA-00904 : invalid identifier (부적합한 식별자)


✔️발생 원인

  1. 존재하지 않는 열 이름을 지정한 경우
  2. 정의된 열 이름과 대소문자가 일치하지 않는 경우
  3. 작은 따옴표(')와 큰 따옴표(") 사용 방법의 오류인 경우
  4. 열 이름에 특수 문자 사용한 경우
  5. 열 이름에 Oracle 예약어 사용한 경우

✔️해결 방안

  • 존재하지 않는 열 이름을 지정한 경우 (칼럼명 오타)

해당 열이 테이블에 존재하는지 확인

  • 정의된 열 이름과 대소문자가 일치하지 않는 경우

정의된 열 이름의 대소문자를 확인

  • 작은 따옴표(')와 큰 따옴표(") 사용 방법의 오류인 경우

작은 따옴표(')로 값을 묶으면 값으로 취급되지만 큰 따옴표(")로 값을 묶으면 객체 이름으로 처리되는 점을 확인

  • 열 이름에 특수 문자 사용한 경우

열 이름 앞에 숫자 혹은 기호가 사용되는 지 확인

  • 열 이름에 Oracle 예약어 사용한 경우

예약어를 사용하고 있는 지 확인



💡 3. ORA-01400: cannot insert NULL into


✔️ 발생 원인

INSERT 할 때 NOT NULL 또는 PRIMARY KEY가 지정되어있는 컬럼에 NULL이 들어가서 생기는 에러


✔️ 해결 방법

데이터를 insert 하기 전에 NOT NULL 과 PRIMARY KEY 제약조건이 걸려있는 컬럼을 확인하여 해당 컬럼들에는 데이터를 필수적으로 입력

ex. 
-- 제약설정 조회

SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'AB'(테이블명);



💡 4. ORA-00955: name is already used by an existing object


✔️ 발생 원인

기존 객체가 이미 동일한 이름으로 생성되어 있는 경우


✔️ 해결 방법

객체 조회 후 해당 객체명으로 이미 생성된게 있으면 삭제 후 새로 생성
또는, 테이블 이름 변경

-- 테이블 객체 조회

SELECT  OBJECT_NAME,OBJECT_TYPE
FROM  USER_OBJECTS
WHERE OBJECT_NAME LIKE '%테이블명%';


-- 테이블(객체)명 삭제

DROP TABLE 테이블명;


-- 테이블(객체)명 변경

ALTER ALTER 기존 테이블명 RENAME TO 변경 테이블명;



💡 5. ORA-01031 : insufficient privileges


✔️발생 원인

사용자에게 해당 작업을 수행할 권한이 없는 경우


✔️ 해결 방법

사용자에게 권한 부여

-- 사용자에게 부여되어있는 권한(ROLE) 조회

SELECT * FROM USER_ROLE_PRIVS;

ex. connect(접속)권한이 없을 경우

GRANT CONNECT TO 계정명;

ex. 객체 생성 권한이 없을 경우

GRANT RESOURCE TO 계정명;

ex. VIEW 생성 권한이 없을 경우

GRANT CREATE VIEW TO 계정명;

💡 6. ORA-00942: table or view does not exist


✔️ 발생 원인

테이블 또는 뷰가 존재하지 않을 때 발생


✔️ 해결 방안

  • 테이블 or 뷰 조회 후 정확하게 작성
-- 테이블 목록 조회(접속한 계정)

-- 방법 1
SELECT * FROM tabs;

-- 방법 2
SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TABLE';

-- 방법 3
SELECT * FROM USER_TABLES;


-- 뷰 목록 조회
SELECT *  FROM USER_VIEWS;
-- 
  • 테이블 또는 뷰 생성
-- 테이블 생성
ex.
CREATE TABLE 테이블명
(
	칼럼명1 데이터타입
    칼럼명2 데이터타입
);

-- 뷰 생성
ex.
CREATE VEIW 테이블명
AS 칼럼명1, 칼럼명2, ... FROM 원본 테이블명;



💡 7. ORA-00923: FROM keyword not found where expected


✔️ 발생 원인

SELECT와 FROM 사이 SQL문법 오류 발생


✔️ 해결 방안

오타, 세미콜론(;), 컴마(,), 띄어쓰기 등 재확인



💡 8. ORA-00909: invalid number of arguments


✔️ 발생 원인

함수를 사용할 때 전달되는 인자의 갯수가 선언된 것과 맞지 않아서 주로 생김


✔️ 해결 방안

쿼리문에서 함수 사용시 인자 갯수가 잘 세팅되어 있는지, 쿼리문에 오타 및 괄호 갯수는 잘 맞는지 확인



💡 9. ORA-01017: invalid username/password logon denied


✔️ 발생 원인

  • 사용자명, 비밀번호 사용자 오타 가능성
  • 계정의 실제 존재 여부 (DBA가 계정을 만들어 놓겠다고 했는데, 아직 안 만들어서 계정이 생성 안 되어 있는 경우)
  • 사용자명/비밀번호 대소문자 설정 여부

✔️ 해결 방안

  • 사용자명, 비밀번호 사용자 오타 가능성

사용자명이나 비밀번호나 오타가 없는지 다시 한번 확인

  • 계정의 실제 존재 여부

데이터 딕셔너리 뷰에서 계정 조회 후 계정 생성

-- 계정 조회

SELECT * FROM DBA_USERS
WHERE USERNAME = 'USERNAME';

SELECT * FROM ALL_USERS
WHERE USERNAME = 'USERNAME';

SELECT * FROM USER_USERS
WHERE USERNAME = 'USERNAME';

-- 계정 생성

CREATE USER 계정명 IDENTIFIED BY 비밀번호;

사용자명/비밀번호 대소문자 설정 여부

캡스락이 눌러져있지 않은지 확인



💡 10. ORA-01722: invalid number


✔️ 발생 원인

  • 조건식 데이터 형식을 잘못 쓴 경우
  • INSERT 나 UPDATE 시에 컬럼의 타입에 맞지 않는 값을 입력

✔️ 해결 방법

  • TRUNC, MOD, ROUND, CEIL 등의 함수를 사용할 때 문자를 넣은 곳이 있는지 확인

  • 조건식에서 문자와 숫자를 비교하는지 확인

  • 컬럼에 데이터 자체가 올바른지 확인



💡 11. ORA-00903: invalid table name


✔️ 발생 원인

테이블명 부적합

테이블명을 INSERT문에 적어주지 않아서 발생


✔️ 해결 방법

테이블명을 쓰고 올바르게 INSERT문 작성



💡 12. ORA-000947: not enough values


✔️ 발생 원인

삽입하려는 값들과 테이블의 컬럼수가 일치하지 않음


✔️ 해결 방법

  • 컬럼명을 지정해서 삽입
INSERT INTO 테이블명(컬럼1, 컬럼2) VALUES(컬럼1에 들어갈 값, 컬럼2에 들어갈 값)
  • 테이블 컬럼의 수에 맞게 데이터 삽입
INSERT INTO 테이블명 VALUES(테이블 컬럼의 수에 맞게 데이터 삽입)



💡 13. ORA-00913: too many values


✔️ 발생 원인

삽입하려는 데이터의 개수가 지정한 컬럼의 개수보다 많을 때 발생


✔️ 해결 방안

컬럼의 개수와 삽입하려는 개수를 맞춰주면 됨



💡 14. ORA-00911: 문자가 부적합합니다


✔️ 발생 원인

대부분 쿼리 구문 끝에 세미콜론이 있는 경유


✔️ 해결 방안

작성한 SQL 쿼리에 세미콜론(;), 콤마(,), 마침표(.)등 문자부호를 한번 더 확인



profile
꾸준히
post-custom-banner

0개의 댓글