source

오류: ORA-01704: 문자열 리터럴이 너무 깁니다.

manysource 2023. 2. 16. 22:08

오류: ORA-01704: 문자열 리터럴이 너무 깁니다.

데이터 유형이 있는 필드에서 4000자 이상의 값을 설정하려고 시도하는 동안CLOB, 다음의 에러가 표시됩니다.

ORA-01704: 문자열 리터럴이 너무 깁니다.

임의의 제안입니다.무제한 문자 값을 설정해야 하는 경우 어떤 데이터 유형이 적용됩니까? 제 경우, 공교롭게도 약 1자 정도입니다.15000문자

주의: 저장하려는 긴 문자열은 ANSI로 인코딩되어 있습니다.

CLOB를 사용할 때는 무엇을 사용하고 있습니까?

모든 이벤트에서 PL/SQL을 사용할 수 있습니다.

DECLARE
  str varchar2(32767);
BEGIN
  str := 'Very-very-...-very-very-very-very-very-very long string value';
  update t1 set col1 = str;
END;
/

SQLFiddle 인증 링크

아래 쿼리와 같이 문자를 여러 청크로 분할하여 시도해 보십시오.

Insert into table (clob_column) values ( to_clob( 'chunk 1' ) || to_clob( 'chunk 2' ) );

그것은 나에게 효과가 있었다.

이 문제를 해결하기 위해 저는 이미 제안되어 있는 것을 조합하여 사용해야 했습니다.

DECLARE
  chunk1 CLOB; chunk2 CLOB; chunk3 CLOB;
BEGIN
  chunk1 := 'very long literal part 1';
  chunk2 := 'very long literal part 2';
  chunk3 := 'very long literal part 3';

  INSERT INTO table (MY_CLOB)
  SELECT ( chunk1 || chunk2 || chunk3 ) FROM dual;
END;

이게 도움이 됐으면 좋겠다.

스플릿은 삽입하는 문자에 따라 4000자까지 동작합니다.특수 문자를 삽입하는 경우 실패할 수 있습니다.안전한 유일한 방법은 변수를 선언하는 것입니다.

매우 오래된 질문이지만, 경험을 공유하는 것이 다른 사람에게 도움이 될 수 있다고 생각합니다.

"||"를 사용하여 4000바이트/문자 청크로 분할하면 하나의 쿼리에 큰 텍스트를 저장할 수 있습니다.

다음 쿼리를 실행하면 다음이 표시됩니다.

  1. 4000바이트를 포함하는 필요한 청크 수
  2. 나머지 바이트

이 예에서는 15000바이트(문자)로 이어지는 텍스트를 저장하려고 하기 때문에,

select 15000/4000 chunk,mod(15000,4000) remaining_bytes from dual;

결과:

즉, 4000바이트의 3개의 청크와 3000바이트의 1개의 청크를 연결해야 합니다.이렇게 하면 다음과 같습니다.

INSERT INTO <YOUR_TABLE> 
VALUES (TO_CLOB('<1st_4K_bytes>') || 
        TO_CLOB('<2nd_4K_bytes>') || 
        TO_CLOB('<3rd_4K_bytes>') || 
        TO_CLOB('<last_3K_bytes>)');
  1. Clob을 반환하는 함수를 작성하다
create  function  ret_long_chars return clob is
begin

 return to_clob('put here long characters');

end; 
update table set column = ret_long_chars;
INSERT INTO table(clob_column) SELECT TO_CLOB(q'[chunk1]') || TO_CLOB(q'[chunk2]') ||
            TO_CLOB(q'[chunk3]') || TO_CLOB(q'[chunk4]') FROM DUAL;

sql developper에서는 받아들여진 답변이 기능하지 않았지만, 이 답변과 다른 답변의 조합이 기능했습니다.

DECLARE
  str varchar2(32767);
BEGIN
  update table set column = to_clob('Very-very-...-very-very-very-very-very-very long string value');
END;
/

언급URL : https://stackoverflow.com/questions/13945710/error-ora-01704-string-literal-too-long