2009-11-19 5 views
3

dbms_output.put_line이 한 번에 2000자를 초과하여 인쇄 할 수없는 다른 사람이 있습니까?오라클 pl/sql 버그 : put_line 2000자를 초과 할 수 없습니다.

스크립트는 다음과 같습니다

set serveroutput on size 100000; 

declare 
    big_str varchar2(2009); 
begin 
    for i in 1..2009 loop 
     big_str := big_str||'x'; 
    end loop; 

    dbms_output.put_line(length(big_str)); 
    dbms_output.put_line(big_str); 
end; 

/

내가 복사 나 붙여되어 있어야합니다 생각되는 있었다 만 2000 자, 아니 2009 년 나에게 말했다 편집기 (메모장 ++)로 출력을 붙여. 이것은 또한 몇 가지 테스트 스크립트에서 발생합니다. 2000 자만 인쇄됩니다. 이 출력에 새로운 라인을 추가

dbms_output.put_line(length(big_str)); 
dbms_output.put_line(substr(big_str,1,1999)); 
dbms_output.put_line(substr(big_str,2000)); 

, 작업중인 텍스트 서식이있을 때 열심히 읽을 수 있습니다 :

나는 다음과 같이 인쇄 할 수있는 해결 방법이 있습니다.

누구나 눈치 채셨습니까? 정말 버그입니까? 아니면 모호한 기능입니까? 더 나은 해결 방법이 있습니까? 거기에 다른 정보가 있습니까?

Oracle 버전은 PL/SQL Developer (Allround Automation에서)를 사용하여 10.2.0.3.0입니다.

+0

절대 시도하지 않았습니다. 품질 관리에 많은 결과가 있습니다. 동적 SQL입니까? –

+3

왜 그것이 버그라고 생각합니까? 어쩌면 put_line은 디자인 상 2000 자로 제한 될 수 있습니다. – skaffman

+1

@Skaffman : put_line 문서에서 2000 자 이상을 인쇄하지 못했습니다. 또한 2000 자의 하드 제한이 있고이를 초과하면 오류가 발생할 것으로 예상되며 2000 년 이후의 모든 문자는 자동으로 삭제되지 않습니다. – FrustratedWithFormsDesigner

답변

10

Oracle 또는 put_line에 대한 제한 사항이 아니라 IDE에서의 제한 사항입니다. Oracle 문서에서

: http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_output.htm#ARPLS036

규칙 및 제한

  • 최대 라인 크기는 32767 바이트입니다.
  • 기본 버퍼 크기는 20000 바이트입니다. 최소 크기는 2000 바이트이고 최대 값은 무제한입니다.

SQL * Plus를 사용하여 테스트 할 수 있습니다.

당신이 2000 년을보고 있다는 사실은 당신의 IDE에 최소한으로 설정되어있는 설정이 있다고 믿게 만듭니다.

+0

그래, IDE 야! SQL * Plus에서 같은 스크립트를 실행했는데 2009 년 문자가 인쇄되었습니다. – FrustratedWithFormsDesigner

1

이렇게 분할하는 것보다 더 나은 해결 방법을 모른다. 새로운 라인 대신의 마지막 dbms_output.put 제외한 모든 전화를 피하기 위해 dbms_output.put_line

+1

그냥 put first와 put_line second를 사용하여 시도해 보았습니다. 여전히 2000 자만 인쇄됩니다! – FrustratedWithFormsDesigner

+1

알아. dbms_output에 대한 여러 호출을 피하는 방법이 아니라 귀찮은 줄 바꿈을 피하는 방법을 알려줍니다. – Dan

-2

수행 dbms_output.enable (1000000); 그것은 당신이에 대해 스크립트를 실행중인 Oracle 데이터베이스의 계획을 문자 인코딩 관련이 같은

그런 시도는 ...

+0

'set serveroutput on size 1000000;'과 같은 효과가 있지만 어쨌든 변경하지는 않았습니다. – FrustratedWithFormsDesigner

+0

가능한 행 수를 변경합니다. – Thorsten

-2

문제가 들린다.

오라클 (X 바이트) 을 의미 (1 바이트) = (1 개 문자) 및 다중 바이트 문자 인코딩 방식을 의미하는 단일 바이트 문자 인코딩 방식을 지원 = (1 개 문자).

VARCHAR2 데이터 유형 의미는 기본값 BYTES입니다. 즉, 데이터베이스에서 기본값이 변경되지 않은 경우 VARCHAR2 (2009)는이 데이터 유형에 2009 BYTES가 있음을 의미합니다.

VARCHAR2 오라클은 물론 의미 4000 바이트최대 제한이 데이터베이스는 단일 바이트 문자 인코딩 방식을 4000 바이트 = 4000 개 문자를 사용하는 경우 그. 코드가 2000자를 생성하기 때문에 데이터베이스가 2 바이트 문자 인코딩 체계를 사용한다는 가정은 아마 안전 할 것입니다.

자세한 내용은 http://download-uk.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#i1835에서 확인할 수 있습니다. 이 링크는 Oracle 11.1 데이터베이스 용이지만 데이터 유형에 관해서는 많이 달라지지 않았다고 생각합니다.

이 정보가 도움이되기를 바랍니다.

+2

생각해 보겠습니다. varchar2 데이터 유형의 최대 크기는 선언 된 위치에 따라 다릅니다. 예를 들어 PL/SQL에서 최대 크기는 32767 바이트입니다. 참조 : http://archive.oracle.com/docs/cd/B19306_01/appdev.102/b14261/datatypes.htm#sthref734 –

+0

-1, varchar2 변수 (테이블 열 제외)가 4K보다 길 수 있으므로 32K –

+0

이것을 지적 해 주신 carpenteri와 ammoQ에 감사드립니다. 나는 그 쟁점의 맥락을 끔찍하게 오해했다. 내 대답을 읽는 데 시간을 낭비하는 모든 사람들에게 사과한다. – Jeighmz

-2

SqlPlus에서 linesize를 설정해보십시오.

set linesize 4000 

페이지 크기를 더 낮은 값으로 설정할 수도 있습니다.

1

TFM에 따르면 최대 줄 크기는 32767이어야합니다. 긴 줄을 읽으려면 DBMS_OUTPUT.GET_LINE을 사용하는 것이 좋습니다. if가 잘 리면 DBMS_OUTPUT의 버그입니다. 그렇지 않은 경우 PL/SQL Developer의 버그입니다.