簡體   English   中英

將Oracle CLOB數據轉換為c#中的字符串

[英]Convert Oracle CLOB data to string in c#

我正在嘗試運行以下查詢,它在 C# 中返回數據表 object。

select TO_CLOB(BLOB) FROM TestBlobData where BSIZE=5000

當我嘗試從數據表 object 中提取值時,看到了一個垃圾值。

DataTable dataTable = RunQuery(QueryMentionedAbove);
var str = dataTable.Rows[0]["BLOB"].ToString();

當我查看Str時,看不到轉換后的字符串。 BLOB 實際上是一個 JSON 字符串。 我不能使用 TO_CHAR 或 TO_NCHAR,因為我的 blob 大小將大於 4000。我的期望是看到我將其存儲為 BLOB 的 JSON 字符串。

請幫助我將 CLOB 轉換為 C# 代碼中的字符串。

您可以使用 function(此答案的反面):

CREATE FUNCTION blob_to_clob(
  value            IN BLOB,
  charset_id       IN INTEGER DEFAULT DBMS_LOB.DEFAULT_CSID,
  error_on_warning IN NUMBER  DEFAULT 0
) RETURN CLOB
IS
  result       CLOB;
  dest_offset  INTEGER := 1;
  src_offset   INTEGER := 1;
  lang_context INTEGER := DBMS_LOB.DEFAULT_LANG_CTX;
  warning      INTEGER;
  warning_msg  VARCHAR2(50);
BEGIN
  DBMS_LOB.CreateTemporary(
    lob_loc => result,
    cache   => TRUE
  );

  DBMS_LOB.CONVERTTOCLOB(
    dest_lob     => result,
    src_blob     => value,
    amount       => LENGTH( value ),
    dest_offset  => dest_offset,
    src_offset   => src_offset,
    blob_csid    => charset_id,
    lang_context => lang_context,
    warning      => warning
  );
  
  IF warning != DBMS_LOB.NO_WARNING THEN
    IF warning = DBMS_LOB.WARN_INCONVERTIBLE_CHAR THEN
      warning_msg := 'Warning: Inconvertible character.';
    ELSE
      warning_msg := 'Warning: (' || warning || ') during BLOB conversion.';
    END IF;
    
    IF error_on_warning = 0 THEN
      DBMS_OUTPUT.PUT_LINE( warning_msg );
    ELSE
      RAISE_APPLICATION_ERROR(
        -20567, -- random value between -20000 and -20999
        warning_msg
      );
    END IF;
  END IF;

  RETURN result;
END blob_to_clob;
/

然后,如果您從這個答案和數據中得到CLOB_TO_BLOB function:

CREATE TABLE table_name ( value BLOB );

INSERT INTO table_name (value ) VALUES ( CLOB_TO_BLOB( 'abcdefg' ) );

然后:

SELECT BLOB_TO_CLOB( value ) FROM table_name;

輸出:

  |  BLOB_TO_CLOB(值) |  |:-------------------- |  |  abcdefg |

db<> 在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM