首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ColdFusion 8获取负载均衡数据

从ColdFusion 8获取负载均衡数据
EN

Stack Overflow用户
提问于 2012-06-15 23:17:23
回答 3查看 1.9K关注 0票数 3

我正在尝试从Oracle数据库中检索CLOB数据。代码如下:

代码语言:javascript
复制
<cfstoredproc datasource="#request.site.datasource#" procedure="GETPAGESWITHMETADATA" result="myResults">
    <cfprocparam cfsqltype="CF_SQL_VARCHAR" type="in" value="News">
    <cfprocparam cfsqltype="CF_SQL_VARCHAR" type="in" value="News Pages">
    <cfprocparam cfsqltype="CF_SQL_CLOB" type="out" variable="XML">
    <cfprocresult name="rs1">
</cfstoredproc>
<cfdump var="#myResults#">
<cfoutput>#XML#</cfoutput>
<cfcatch type="any">
    <cfdump var="#cfcatch#">
</cfcatch>
</cftry>

基本上,存储过程的输出是:

代码语言:javascript
复制
select dbms_xmlquery.getxml(queryCtx) INTO XML from dual;

我检查了服务器上的数据源和“启用长文本检索(CLOB)”。选项为每个数据源选中。

令人惊讶的是,我得到的不是屏幕上的XML结果,而是一个非常短的字符串:[C@74897f5e

它看起来像一个句柄id,而不是内容本身。

如何检索XML的完整内容?

作为参考,数据源使用的是宏媒体驱动程序,名称为:驱动程序类: macromedia.jdbc.MacromediaDriver

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-20 22:50:58

正如@MarkAKruger建议的那样,从过程中返回一个表解决了这个问题。下面的PL/SQL代码做到了这一点:

代码语言:javascript
复制
create or replace
PACKAGE PCK_Commonspot
AS
type t_clob IS record (metadata CLOB) ;
type t_clob_tab IS TABLE OF t_clob;
FUNCTION GetPagesWithMetadataAsRS(FormName varchar2, CategoryName varchar2)
    RETURN t_clob_tab pipelined;
END PCK_Commonspot;

包体包含以下代码:

代码语言:javascript
复制
FUNCTION GetPagesWithMetadataAsRS(FormName varchar2, CategoryName varchar2)
    RETURN t_clob_tab pipelined
IS
    r t_clob;
 BEGIN
    GETPAGESWITHMETADATA(FormName, CategoryName, r.metadata) ;
    pipe row(r) ;
    RETURN;
END;

GETPAGESWITHMETADATA函数是将一个CLOB返回到r.metadata中的函数,这里的诀窍是返回一个管道表格。

这在ColdFusion端变得非常好,因为调用非常简单:

代码语言:javascript
复制
<cfquery name="Test" datasource="myDS" maxrows="1">
    SELECT * FROM TABLE(PCK_Commonspot.GetPagesWithMetadataAsRS('abc','def'))
</cfquery>
<cfset XML = Xmlparse(Test.Metadata)>

谢谢,马克!

票数 1
EN

Stack Overflow用户

发布于 2012-06-16 00:43:58

检查CF管理器中的数据源设置。在高级设置下,有允许返回BLOB和CLOB数据的复选框。如果取消选中它们,则可能会获得在查询中返回的截断数据

票数 0
EN

Stack Overflow用户

发布于 2012-09-04 14:10:08

尽管Jaepetto已经回答了他的问题,但我想我应该为后人贡献另一个答案。

我也遇到过类似的问题,将CLOB数据从Oracle11g返回到CF8中。最初的解决方案(不起作用)大致是:

代码语言:javascript
复制
<cfquery name="GetDoc" DATASOURCE=myDS>
SELECT CLOBDATA FROM FILES WHERE FILES.FILEID = #FileID#
</cfquery>

此查询将成功完成,但GetDoc.CLOBDATA将始终为空字符串。事实证明,使用cfquery检索CLOB数据总是可以做到这一点,但如果我将其包装在一个存储过程中,那么它就可以工作。我假设这是我们正在使用的JDBC驱动程序的一些怪癖。

无论如何,我的解决方案的CF核心如下所示。注意,使用CF_SQL_LONGVARCHAR而不是CF_SQL_CLOB -使用CF_SQL_CLOB提供了Jaepetto看到的奇怪的句柄ID值。

代码语言:javascript
复制
<cfstoredproc PROCEDURE="GETCLOB" DATASOURCE=myDS >
<CFPROCPARAM    TYPE="IN" CFSQLTYPE="CF_SQL_INTEGER" DBVARNAME="pFileID" value="#fileID#"/> 
<CFPROCPARAM    TYPE="OUT" CFSQLTYPE="CF_SQL_LONGVARCHAR" DBVARNAME="pClob" VARIABLE="vClob" /> 
</cfstoredproc>

<!--- Dump the clob to the local filesystem --->
<cfscript>
fstream = CreateObject("java", "java.io.FileOutputStream").init(filepath, JavaCast("boolean","true"));
outStream = CreateObject("java", "java.io.BufferedOutputStream").init(fstream);

outStream.write(#toBinary(vClob)#);
outStream.flush();
outStream.close();
</cfscript>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11053539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档