본문 바로가기
프로그래밍/데이터베이스

ORA-01461 Long 열에 입력할때만 Long 값을 바인딩 할 수 있다.

by pentode 2018. 8. 21.

Oracle 데이터베이스 입력 쿼리에서 "ORA-01461: can bind a LONG value only for insert into a LONG column" 에러가 발생하였습니다. 테이블에 Long 타입의 열은 없었습니다.


원인은 VARCHAR2(4000) 열에 열의 크기를 초과하는 값을 넣어려고 해서 발생한 것이었습니다.


해결 방법은 더 큰 데이터를 입력해야 하므로 CLOB 타입으로 변경하여 처리했습니다. 오라클에서 VARCHAR2 타입의 컬럼을 CLOB 타입으로 바꾸는 방법은 "Oracle에서 VARCHAR2 컬럼을 CLOB으로 변경하기"을 참조하세요.




그외에 발생가능한 상황으로는 PL/SQL 에서 함수에 4,000바이트 이상의 값을 가진 변수를 사용하려고 할 경우입니다.



CREATE TABLE TB_TEST(

    v VARCHAR2(10),

    c CLOB

);


DECLARE

    SHORT_STR VARCHAR2(10) := '0123456789';

    LONG_STR  VARCHAR2(5000);

    

    BEGIN

    FOR i IN 1 .. 5000

    LOOP

        LONG_STR := LONG_STR || 'X';

    END LOOP;

  

    -- ORA-01461 발생

    INSERT INTO TB_TEST(v, c) VALUES(LONG_STR, LONG_STR);


    -- ORA-01461 발생: 함수에 사용할 수 없음.

    INSERT INTO TB_TEST(v, c) VALUES (SHORT_STR, SUBSTR(LONG_STR, 1, 4000));

END;


오라클 SQL에서 VARCHAR2 의 최대 사이즈는 4,000바이트이지만, PL/SQL에서 VARCHAR2 변수의 최대 사이즈가 32,767 바이트 입니다. 하지만 위의 예에서 처럼 함수에서는 4,000 바이트까지만 사용할 수 있습니다.



반응형