2011-09-28 42 views
1

我有一個包含大量數據的CLOB列的Oracle SQL數據庫。我遇到了一個問題,即普通的PHP字符串變量不能保存我在CLOB列中的所有數據。它只能讀取4618位,但我的文件要大得多。 CLOB列有一系列IP地址。我需要做的是分析CLOB列,以便我可以提取這些IP地址;但是,字符串變量不會保留足夠的數據,甚至無法訪問存儲IP地址的文檔部分。有什麼想法嗎?如何讀取太大而不適合字符串的CLOB列?

+2

我有,你應該用一個外鍵指向回原來的表存儲在單獨的表你的IP地址的感覺。 – Bojangles

+0

PHP中字符串的長度沒有限制(系統內存或memory_limit除外)。你是否收到錯誤信息? – timdev

+0

好吧,當我做到這一點,並嘗試回聲$ IPADDR,頁面加載罰款,對文件的只顯示了一部分: $ IPADDR = $ clob->閱讀(700); 然而,當我做到這一點,頁面沒有加載: $ IPADDR = $ clob->閱讀($ clob->大小()); 然後,我會收到以下錯誤消息: XML分析錯誤:格式不正確 – stix122

回答

0

根據您的意見:

如果你就在你的瀏覽器中單擊並說「查看源文件」,你會看到你確實有整個文件。

最有可能你只需要發射的數據返回給瀏覽器時,設置相應的ContentType。

+0

好吧,contentType是XML,並且該字符串嵌入在XML標記中。我應該做一些不同的事情嗎? – stix122

+0

@ stix122:可能。我經常看到瀏覽器抱怨文件不符合XML,恕我直言,它是。你可以看看下面的內容,看看它是否有助於解決你的實際問題http://mycodetrip.com/2007/03/26/fix-for-xml-parsing-error-not-well-formed-line-number-1 -column -2- error_36 / – NotMe

0

首先,嘗試增加PHP內存限制,看看是否有錯誤產生任何影響。如果正在檢索的CLOB對象真的很大,比如2 GiB,那麼在PHP中無法處理它,因爲整個對象必須保存在內存中。

如果列具有固定長度的數據,它應該是相當容易的構成,其提取它的一部分的適當的查詢。假設數據被編碼爲固定長度的文本,然後像這樣將工作:

// assumes subfield is xxx.xxx.xxx.xxx: 19 fixed characters 
SELECT substr (TO_CHAR(gnarly_ipadddress_fieldname), 1, 19) as ipaddr1, 
     substr (TO_CHAR(gnarly_ipadddress_fieldname), 20, 19) as ipaddr2, 
     substr (TO_CHAR(gnarly_ipadddress_fieldname), 39, 19) as ipaddr3 
FROM table 
WHERE (whatever); 

如果子字段是可變長度的話,說不定抓住像16K塊,並在PHP解析它是要走的路。

相關問題