source

oracle pl/sql 내부에서 CLOB를 VARCHAR2로 변환하는 방법

factcode 2023. 7. 3. 23:22
반응형

oracle pl/sql 내부에서 CLOB를 VARCHAR2로 변환하는 방법

clob 변수가 있어서 varchar2 변수에 할당해야 합니다.clobvar 내부 데이터가 4000(i..e varchar2의 최대 크기) oracle10+ 미만임

나는 노력했다.

  report_len  := length(report_clob);
  report      := TO_CHAR(dbms_lob.substr(report_clob, report_len, 1 ));
  report_clob := null;

보고서를 디버깅할 때 표시되는 긴 값으로 변환합니다.또한 내 C# 코드에서 이 sql(proc)을 호출할 때도 마찬가지입니다.barchar에 따라 매개 변수를 보내기 때문에 버퍼가 너무 작다는 불만이 제기되지만 위의 변환으로 인해 긴 값으로 변경될 수 있습니다.

저는 직접적인 과제도 시도했습니다.

   report_clob := report 

같은 결과를 얻는 것.

편집

좋습니다. 아래 질문에 대한 답변은 다음을 참조하십시오.PL/SQL 개발자에서 테스트 스크립트를 사용하여 디버깅합니다.보고서 변수는 varchar2(varchar2(valc)입니다.제가 두 번째 줄을 밟을 때.보고서는 긴 값으로 표시되며 (긴 값)이라고만 표시됩니다. 내용을 볼 수도 없습니다.

report 및 report_clob이 프로시저에서 제외 변수입니다.이 절차는 C# 코드에서 호출됩니다.

이 절차를 호출할 때 C#에 예외 문자열 버퍼가 너무 작습니다.절차에서 최대 4000자의 값을 받을 수 있을 정도로 C#의 보고서 변수 크기로 5000을 지정했습니다.그래서 문제는 거기에 있지 않다고 생각합니다.

그리고 제가 보고서를 할당할 때: = '어떤 문자열...' 그러면 C# 통화가 잘 작동합니다.

그래서 제가 조사한 바로는 report:= transform(report_clob)이 report를 long value(long value)로 만들고 있거나 C# 코드가 5000 varcharout 매개 변수에서 더 큰 값을 처리하는 데 문제가 있다고 합니다.

그 이상의 세부사항을 기꺼이 제공하겠습니다.

인용문(여기 읽어보기)-

CAST를 사용하여 CLOB 값을 문자 데이터 유형으로 변환하거나 BLOB 값을 RAW 데이터 유형으로 변환하면 데이터베이스가 LOB 값을 문자 또는 원시 데이터 유형으로 암시적으로 변환한 다음 결과 값을 대상 데이터 유형으로 명시적으로 캐스트합니다.

그래서, 이런 것들이 효과가 있을 것입니다.

report := CAST(report_clob AS VARCHAR2(100));

또는 그것을 사용하는 것이 더 낫습니다.CAST(report_clob AS VARCHAR2(100))당신이 사용하려고 하는 곳은 어디든지.BLOB~하듯이VARCHAR.

VARCHAR2를 CLOB로 변환

PL/SQL에서 CLOB는 간단한 할당, SUSTR 및 기타 방법으로 VARCHAR2로 변환할 수 있습니다.단순 할당은 CLOB가 VARCHAR2 크기보다 작거나 같은 경우에만 작동합니다.제한은 PL/SQL에서 32767, SQL에서 4000입니다(SQL에서 12c가 32767을 허용하지만).

예를 들어, 이 코드는 간단한 할당을 통해 작은 CLOB를 변환한 다음 큰 CLOB의 시작 부분을 다룹니다.

declare
    v_small_clob clob := lpad('0', 1000, '0');
    v_large_clob clob := lpad('0', 32767, '0') || lpad('0', 32767, '0');
    v_varchar2   varchar2(32767);
begin
    v_varchar2 := v_small_clob;
    v_varchar2 := substr(v_large_clob, 1, 32767);
end;

긴가요?

위 코드는 값을 LONG으로 변환하지 않습니다.PL/SQL 디버거와 999자가 넘는 문자열에 대한 제한 때문에 그렇게 보일 뿐입니다.

예를 들어 PL/SQL Developer에서 Test 창을 열고 위의 코드를 추가하고 디버그합니다.마우스 오른쪽 단추 클릭v_varchar2"변수를 시계에 추가"를 선택합니다.코드를 단계적으로 실행하면 값이 "(긴 값)"으로 설정됩니다.이 ....텍스트 옆에 있지만 내용은 표시되지 않습니다. PLSQL Developer Long Value

C#?

저는 여기서 진짜 문제가 C#과 관련이 있다고 생각하지만, C#과 관련된 문제를 디버그하기에 얼마나 충분한지 모르겠습니다.

ALTER TABLE TABLE_NAME ADD (COLUMN_NAME_NEW varchar2(4000 char));
update TABLE_NAME set COLUMN_NAME_NEW = COLUMN_NAME;

ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME;
ALTER TABLE TABLE_NAME rename column COLUMN_NAME_NEW to COLUMN_NAME;

이것이 나의 대략적인 견해입니다.

  Declare 
  Variableclob Clob;
  Temp_Save Varchar2(32767); //whether it is greater than 4000

  Begin
  Select reportClob Into Temp_Save From Reporte Where Id=...;
  Variableclob:=To_Clob(Temp_Save);
  Dbms_Output.Put_Line(Variableclob);


  End;

언급URL : https://stackoverflow.com/questions/12860526/how-to-convert-clob-to-varchar2-inside-oracle-pl-sql

반응형