728x90

메세지

ORA-01441: cannot decrease column length because some value is too big

 

원인

넣을려는 곳의 정해진 자료형의 값보다 큰 값을 넣을려고 해서 발생

크기 수정할 때는 안에 데이터의 크기가 어떤지를 보고 수정해야함

ALTER TABLE DEPT_COPY
MODIFY DEPT_TITLE VARCHAR2(10);
-- ORA-01441: cannot decrease column length because some value is too big
-- 크기 수정할 때는 안에 데이터의 크기가 어떤지를 보고 수정해야함

 

728x90
반응형
728x90

메세지

ORA-02264: name already used by an existing constraint 02264. 00000 - "name already used by an existing constraint"

*Cause: The specified constraint name has to be unique.

*Action: Specify a unique constraint name for the constraint.

 

원인

테이블명이 달라도 제약조건이 겹치면 에러 발생

 

상황

USER_GRADE2테이블을 USER_FOREIGNKEY2테이블에서 FOREIN KEY 제약조건을 걸려던 중 발생

 

해결

겹치는 제약 조건을 삭제

제약조건 삭제 ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;

 

참고 코드

CREATE TABLE USER_GRADE2(
    GRADE_CODE NUMBER PRIMARY KEY,
    GRADE_NAME VARCHAR2(30) NOT NULL
);
INSERT INTO USER_GRADE2 VALUES(10, '일반회원');
INSERT INTO USER_GRADE2 VALUES(20, '우수회원'); 
INSERT INTO USER_GRADE2 VALUES(30, '특별회원');

CREATE TABLE USER_FOREIGNKEY2(
    USER_NO NUMBER PRIMARY KEY,
    USER_ID VARCHAR2(20) UNIQUE,
    USER_PWD VARCHAR2(30) NOT NULL,
    USER_NAME VARCHAR2(30),
    GENDER VARCHAR2(10),
    PHONE VARCHAR2(30),
    EMAIL VARCHAR2(50),
    GRADE_CODE NUMBER,
    CONSTRAINT UF_GC_FK FOREIGN KEY(GRADE_CODE) REFERENCES USER_GRADE2(GRADE_CODE)
);/* ERROR 발생
ORA-02264: name already used by an existing constraint
02264. 00000 -  "name already used by an existing constraint"
*Cause:    The specified constraint name has to be unique.
*Action:   Specify a unique constraint name for the constraint.
*/
728x90
반응형
728x90

 

ALTER, DROP - 컬럼 추가,삭제,수정, 컬럼명 변경, 제약조건 추가 ,삭제, 제약조견명 변경

테이블명 변경, 삭제

RENAME A TO B

ADD

MODIFY

 

/*
------------------------------------------------------------------------------
----------------------------------ALTER --------------------------------------
------------------------------------------------------------------------------

-- ALTER 
객체 수정

컬럼 추가/삭제, 제약조건 추가/삭제, 컬럼 자료형 변경, 디폴트값 변경
테이블명/컬럼명/제약조건명 변경


*/

-- 컬럼 추가/삭제/수정

SELECT * FROM UC;

-- 추가
ALTER TABLE UC ADD (PHONE NUMBER);
ALTER TABLE UC ADD (NATIONALITY VARCHAR2(20) DEFAULT '한국');
-- 컬럼 PHONE, NATIONALITY 추가완료. NATIONALITY 지정안하면 기본값으로 한국


DESC UC;
-- 수정
ALTER TABLE UC
MODIFY USER_ID VARCHAR2(30)
MODIFY GENDER CHAR(3) -- ERROR : ORA-01441: cannot decrease column length because some value is too big
MODIFY NATIONALITY DEFAULT '미국';  -- 바꿀 자료형의 크기가 들어있는 데이터보다 작으면 에러

-- 삭제
ALTER TABLE UC
DROP COLUMN PHONE; -- PHONE 컬럼 삭제


-- 제약 조건과 함께 컬럼 삭제
ALTER TABLE UC
DROP COLUMN USER_NAME CASCADE CONSTRAINT;

DESC UC;

------------------------------------------------------------------------------
------------------------------------------------------------------------------

ALTER TABLE TB1
DROP COLUMN COL1;


-- 제약 조건과 함께 삭제
ALTER TABLE TB1
DROP COLUMN PK1 CASCADE CONSTRAINTS;

SELECT * FROM UC;

-- 제약 조건 추가
ALTER TABLE UC ADD CONSTRAINT UC_GEN_UQ UNIQUE(GENDER);
ALTER TABLE UC ADD CONSTRAINT EMP_ENAME_UQ UNIQUE(USER_NO);
ALTER TABLE UC ADD CONSTRAINT EMP_ENAME_UQ UNIQUE(USER_NO);



-- 제약조건 삭제
ALTER TABLE UC DROP CONSTRAINT EMP_ENAME_UQ;

-- 제약조건 한번에 여러개 삭제
ALTER TABLE UC
DROP CONSTRAINT SYS_C007129
DROP CONSTRAINT SYS_C007130
DROP CONSTRAINT SYS_C007127; -- GENDER의 CHECK 남여조건 빼고 제약조건 다 삭제

-- 컬럼명 변경
-- RENAME A TO B : A를 B로 컬럼명 변경
ALTER TABLE UC
RENAME COLUMN GENDER TO GENDER2;
ALTER TABLE UC
RENAME COLUMN GENDER2 TO GENDER;

-- 제약조건 이름 변경
ALTER TABLE UC
RENAME CONSTRAINT SYS_C007128 TO UC_CHECK1; 

DESC UC;
------------------------------------------------------------------------------

--테이블명 변경
ALTER TABLE DEPT_COPY
RENAME TO DEPT_COPY2;

--테이블 삭제
DROP TABLE DEPT_COPY;
--테이블+제약조건 삭제
DROP TABLE DEPT_COPY
CASCADE CONSTRAINTS;
728x90
반응형

+ Recent posts