[英]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.