Oracle SQLPlus基于变量设置环境变量

Oracle SQLPlus基于变量设置环境变量,oracle,sqlplus,Oracle,Sqlplus,我想根据要检索的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 s

我想根据要检索的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选项不是有效的数字,XML文件仅包含80个字符。

而不是

set long XML_DATA_SIZE
试一试

[编辑]:

抱歉,我胡乱摆弄了一些其他的选项,把我的考试搞砸了。 试试这个:

define xml_data_size=0
column xml_data_size new_value xml_data_size noprint

select trim(length(xmltype.getClobVal(xml_data))) xml_data_size from xml_tab where key = '1234';

set long &xml_data_size
sho long
set pagesize 0
...
...

如果已将其设置为值,则不会。它在SQL中对我有效*PlusI尝试过,它会提示我。我可以输入print语句给我的数字,一切正常,但我最终想把它交给分析员,分析员将以批处理模式运行它并使用生成的文件。@OMG Ponies-你说得对,我的错!我不经意间尝试了一些其他的方法,但最终还是成功了,但却弄乱了我原始答案的测试用例。对我来说,我需要bind变量的:前缀,否则我会得到一个缺少关键字的错误。另外,我得到一个错误,说SP2-0267:long选项0超出范围1到…哦,等等,如果这是一个我不需要进入的列。没关系,这确实有效亚当·霍克斯:根据我所读到的,如果我将long设置为可能的最大值,即使我返回的实际数据要小得多,客户端也需要那么多的空闲内存。我并不期望可能的最大值,但我不太愿意猜测实际的最大值。在测试数据中,示例XML文档的范围为20 KB到3000 KB,这只是非常简单的测试数据。这将是一个问题。我很确定限制是200万字节。所以3000K的信息将被切断。在客户机上分配2MB内存对我来说并不是什么大问题。@Adam Hawkes:如果他们想要的数据太大,嗯。。。我想他们将不得不回去手工做他们想做的事;据我所见,这不是他们想要查看的大多数数据。根据我在这里读到的内容,*n*的最大值是2000000000字节。哇,是的,我错了1000倍。20亿,而不是200万。
define xml_data_size=0
column xml_data_size new_value xml_data_size noprint

select trim(length(xmltype.getClobVal(xml_data))) xml_data_size from xml_tab where key = '1234';

set long &xml_data_size
sho long
set pagesize 0
...
...