【发布时间】:2010-10-27 05:08:18
【问题描述】:
我想根据我要检索的 XML 数据的大小设置环境变量 long。这个想法是这样的:
var XML_DATA_SIZE number;
SELECT TRIM(LENGTH(xmltype.getClobVal(xml_data)))
INTO :XML_data_size
FROM xml_tab
WHERE key = '1234';
print XML_DATA_SIZE
set long XML_DATA_SIZE
set pagesize 0
set line 2000
set termout off
spool XMLDATA.xml
select xml_data from xml_tab where key = '1234';
spool off
这会产生错误:SP2-0268: long option not a valid number,并且 XML 文件仅包含 80 个字符。
【问题讨论】:
-
为什么不直接把它调到最大不用担心呢?
-
@Adam Hawkes:根据我的阅读,如果我将
long设置为可能的最大值,客户端将需要那么多可用内存,即使我返回的实际数据要小得多.我预计不需要最大可能,但我非常不愿意猜测实际的最大值。在测试数据中,示例 XML 文档从 20 KB 到 3000 KB 不等,这只是非常简单的测试数据。 -
嗯,这将是一个问题。我很确定限制是 200 万字节。所以这 3000K 消息将被切断。在客户端上分配 2MB 的 RAM 对我来说似乎没什么大不了的。
-
@Adam Hawkes:好吧,如果他们想要的数据太大,嗯……我想他们将不得不回去做任何他们想做的事情。 ;) 据我所见,这不会是他们想要查看的大部分数据。从我在这里读到的download.oracle.com/docs/cd/B19306_01/server.102/b14357/…,
The maximum value of *n* is 2,000,000,000 bytes. -
哇,是的,我错了 1000 倍。20 亿,而不是 200 万。