【问题标题】:Accessing RAISEERROR message from cfstoredproc从 cfstoredproc 访问 RAISEERROR 消息
【发布时间】:2009-12-10 09:21:53
【问题描述】:

我有一个 SQL 存储过程,它在某些情况下如果失败会返回 -1 的结果,但也会通过 RAISERROR 命令返回一条消息,例如:

BEGIN

    RAISERROR ('Error %i has occurred', 11, 1, 0)
    RETURN -1

END

我正在使用 cfstoredproc 通过coldfusion 访问它,例如:

<cfstoredproc procedure="sp_return" datasource="myDatasource" returncode="yes">
<cfdump var="#cfstoredproc#">

但返回的结构只包含一个 ExecutionTime 和 StatusCode 键。有什么方法可以访问已返回的错误消息。例如向用户展示。

谢谢,

汤姆

附言我会用“cfstoredproc”标记,但我无法创建新标记。

【问题讨论】:

    标签: sql stored-procedures coldfusion raiserror cfstoredproc


    【解决方案1】:

    不确定您使用的是什么数据库,但对于 Oracle,我只是使用 ColdFusion 异常来冒泡 Oracle 异常。 - #cfcatch.message# 和 #cfcatch.detail# 是您想要回显给用户的内容。

    <cftry>
    
    <cfstoredproc  procedure = "my_Proc" dataSource = "#DB#" returnCode = "No">
       <cfprocparam type="in" cfsqltype="CF_SQL_VARCHAR" variable="myvar"   value="#someval#" null="No"> 
       <cfprocresult name="my_Response">
    </cfstoredproc>
    
    <cfcatch type="any">
    
       <cflog file="ProcError" text="Message = #cfcatch.message# Detail= #cfcatch.detail#">
    
    </cfcatch>
    </cftry>
    

    【讨论】:

    • 我正在使用 SQL Server 2005。当我尝试将 cftry/cfcatch 块包裹在我的代码周围时,它没有任何区别 - 没有引发冷融合错误,所以我猜没有什么可以捕获的。
    • 我确认使用 SQL Server 2005 和 Adob​​e CF 8 确实收到了 cfcatch 中的错误。详细信息:[Macromedia][SQLServer JDBC Driver][SQLServer]Error 0 has occurred
    • @Loftx - 看起来很奇怪,但在“自定义调试输出”下的“调试输出设置”中有一个关于在调试中显示异常信息的设置。我在关闭强大调试的服务器中使用该技术,但可能需要检查该字段。它在你的盒子上吗?
    • RAISERROR 中的严重性 11 很重要; ColdFusion 似乎会忽略 10 及以下的任何内容,但 11 会导致异常。
    【解决方案2】:

    您尝试过 cfprocresult 吗? Manual page 说:

    将查询对象与 存储返回的结果集 过程。

    【讨论】:

    • 嗨,我用 cfprocresult 在原始回复中尝试了查询。转储此变量时,我得到一个变量未定义错误。从阅读文档看来,这是用于返回查询,而我的存储过程返回 -1 和错误消息。
    • 看,您必须执行 SELECT 才能填充此变量,例如“SELECT 'this is error text' AS error”。我不是 SQL 服务器专家,但我想可以处理过程中的错误并使用 SELECT 返回结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多