存儲過程clob
『壹』 存儲過程如何按行讀取CLOB內容
create table test_clob(id integer,info clob);insert into test_clob values(2,'');commit;select * from test_clob;declare vv_buf varchar2(32767);vv_buf1 varchar2(32767);i integer;begin select t.info into vv_buf from test_clob t where t.id = 2; i := 1; while instr(vv_buf,chr(10),i) >= 1 loop vv_buf1 := substr(vv_buf,i,instr(vv_buf,chr(10),i)-i); i := instr(vv_buf,chr(10),i) + 1; dbms_output.put_line('---------------'); dbms_output.put_line(vv_buf1); end loop; if i <> length(vv_buf) then dbms_output.put_line('---------------'); vv_buf1 := substr(vv_buf,i,length(vv_buf)); dbms_output.put_line(vv_buf1); end if;end;不知道這個是否滿足。
『貳』 delphi clob 儲存過程
var
BinData: OleVariant;
s: string;
stream: TStringStream;
DataPtr: Pointer;
len: integer;
begin
s := '34343434......';
stream := TStringStream.Create(s);
len := stream.Size;
BinData := VarArrayCreate([0, len-1], varByte);
DataPtr := VarArrayLock(BinData);
try
stream.ReadBuffer(DataPtr^, Len);
sp1.Parameters.CreateParameter('參數1', ftBlob,pdInput, len ,BinData);
finally
VarArrayUnlock(BinData);
end;
end;
沒有驗證是否可行,僅供參考
『叄』 如何用存儲過程讀取CLOB類型的欄位
create or replace procere get_news
as
v_varchar VARCHAR2(1000);
v_start PLS_INTEGER := 1;
v_buffer PLS_INTEGER := 1000;
begin
dbms_output.enable(1000000);
for rec in (select test,name,value from test) loop
FOR i IN 1..CEIL(DBMS_LOB.GETLENGTH(rec.value) / v_buffer) LOOP
dbms_output.put_line('value是CLOB類型,從'||v_start||'起獲取:'||DBMS_LOB.SUBSTR(rec.value, v_buffer, v_start));
v_start := v_start + v_buffer;
end loop;
end loop;
end;
『肆』 通過資料庫鏈接調用存儲過程,入參有clob欄位怎麼處理
通過資料庫鏈接調用存儲過程,入參有clob欄位怎麼處理
就是類似取出dbms_output.put_line它的東西,只不過不輸出。
有參考例子么,什麼實現防範都可以
『伍』 存儲過程 輸出函數為clob欄位 為什麼輸出時還出現「ora-06502 字
開發Delphi 2009+Oracle 10g,資料庫控制項是dbexpress 修改Oracle Clob欄位數據要去大一點的書店才有 看樣子是處理單位元組字元與雙位元組字元過程出問題
『陸』 超過4000位元組,用C#怎麼存儲到CLOB
若要獲取 OracleLob 對象,請調用 GetOracleLob 方法。
可以使用如下格式構造值為 NULL 的 OracleLob:
OracleLob myLob = OracleLob.Null;
該技術主要用於測試從伺服器返回的 LOB 是否為 NULL,如此示例所示:
if( myLob == OracleLob.Null)
NULL LOB 的行為與零位元組 LOB 的相似之處在於,Read 成功並始終返回零位元組。
選擇一個包含空值的 LOB 列可返回 Null。
必須在獲取臨時 LOB 之前開始事務。否則,OracleDataReader 將不能獲取後面的數據。
還可以通過調用 DBMS_LOB.CREATETEMPORARY 系統存儲過程並綁定 LOB 輸出參數打開 Oracle 中的臨時 LOB。在客戶端,臨時 LOB 的行為很像基於表的 LOB。例如,要更新臨時 LOB,它必須包含在事務中。
下面的 C# 示例闡釋如何打開一個臨時 LOB。
OracleConnection conn = new OracleConnection( "server=MyServer; integrated security=yes; ");
conn.Open();
OracleTransaction tx = conn.BeginTransaction();
OracleCommand cmd = conn.CreateCommand();
cmd.Transaction = tx;
cmd.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end; ";
cmd.Parameters.Add(new OracleParameter( "tempblob ", OracleType.Blob)).Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
OracleLob tempLob = (OracleLob)cmd.Parameters[0].Value;
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
tempLob.Write(tempbuff,0,tempbuff.Length);
tempLob.EndBatch();
cmd.Parameters.Clear();
cmd.CommandText = "myTable.myProc ";
cmd.CommandType = CommandType.StoredProcere;
cmd.Parameters.Add(new OracleParameter( "ImportDoc ", OracleType.Blob)).Value = tempLob;
cmd.ExecuteNonQuery();
tx.Commit();
『柒』 一個關於oracle存儲過程的clob問題
v_parse:= xmlparser.newParser();
xmlparser.parserClob(v_parse,clob數據);
xmldom.domdocument
xmldom.domnodelist
『捌』 如何在存儲過程中正確使用lob
SQLPLUS>set long 100000(還可以更大,只要你的內存足夠大,讓clob列的數據能存到buffer中)select [clob列名] from 表名