在 ColdFusion 中如何使用 in 变量获取 Oracle 存储过程以返回值?
Posted
技术标签:
【中文标题】在 ColdFusion 中如何使用 in 变量获取 Oracle 存储过程以返回值?【英文标题】:How in ColdFusion with in variables get a Oracle stored procedure to return values? 【发布时间】:2011-10-13 00:58:52 【问题描述】:ORACLE 11g - COLDFUSION 9 - REF CURSOR - 至少有一个变量。
在 ColdFusion 中如何通过 in 变量获取 Oracle 存储过程以返回值?
我们尝试了几件事,如果我们不传入变量,我们可以得到一个存储过程来返回一个结果集,但是当我们传入变量时,我们无法得到它们。
我们知道如何调用 MS SQL。
感谢您的帮助
附:我们听说当前的 Oracle 驱动程序可能无法实现这一点,是否有不同的 Oracle 驱动程序?
根据我在网上阅读的内容,我认为这不仅仅是一个编码问题。我希望我错了。这只是我作为概念证明工作的一个示例,因此我可以开始创建所有这些示例。如果我不使用 ref cusor,我可以让它工作。
执行数据库查询时出错。 [Macromedia][Oracle JDBC 驱动程序]此驱动程序不支持指定的 SQL 类型。
错误发生在 D:\apache\htdocs\test\index.cfm: line 86
84 : 85: 86: 87: 88:
CF 调用过程
<cfstoredproc procedure="BWNGDBADEV.PACK_REFCURSOR.GETALL" datasource="mydatasourcename" returncode="no">
<cfprocparam type="InOut" cfsqltype="CF_SQL_INTEGER" variable="pPERSONNELID" value="4" null="No">
<cfprocparam type="Out" cfsqltype="CF_SQL_REFCURSOR" variable="AnyVarName">
<!--- *** This name ties StoredProc results to the query below *** --->
<cfprocresult name="myvar">
</cfstoredproc>
Oracle 包
CREATE OR REPLACE
PACKAGE PACK_REFCURSOR
AS
TYPE EMP_TableRows
IS
REF
CURSOR
RETURN BWNGDBADEV.PER_PERSONNEL%ROWTYPE;
PROCEDURE GETALL(
pPERSONNELID IN OUT BWNGDBADEV.PER_PERSONNEL.PERSONNELID%type,
OUTTABLE OUT EMP_TableRows);
END PACK_REFCURSOR ;
/
CREATE OR REPLACE
PACKAGE BODY PACK_REFCURSOR
AS
PROCEDURE GETALL(
pPERSONNELID IN OUT BWNGDBADEV.PER_PERSONNEL.PERSONNELID%type,
OUTTABLE OUT EMP_TableRows)
IS
BEGIN
-- implicit cursor is opened - no close needed ***
OPEN OUTTABLE FOR
SELECT *
FROM BWNGDBADEV.PER_PERSONNEL
WHERE PERSONNELID = pPERSONNELID;
END GETALL ;
END PACK_REFCURSOR ;
/
【问题讨论】:
您能否展示完整的 SP 或 SP 的一部分?如果那样的话,我可以追踪它。 如果我没记错的话,我认为Oracle不能支持整个结果集。 【参考方案1】:文档中有一条小说明:“您不能对 Oracle 8 和 9 引用游标使用 cfprocparam 标记。相反,请使用 cfprocresult 标记。”
http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7d52.html
尝试以下方法:
<cfstoredproc
procedure = "BWNGDBADEV.PACK_REFCURSOR.GETALL"
dataSource = "mydatasourcename"
returnCode = "Yes">
<!--- cfprocparam tags --->
<cfprocparam type="InOut" cfsqltype="CF_SQL_INTEGER" variable="pPERSONNELID" value="4" null="No">
<cfprocparam type="Out" cfsqltype="CF_SQL_REFCURSOR" variable="AnyVarName">
<!--- cfprocresult tags --->
<cfprocresult name="RS1" resultSet="1">
<cfprocresult name="RS2" resultSet="2">
</cfstoredproc>
【讨论】:
【参考方案2】:您有最新的 DataDirect JDBC 驱动程序吗?
v 3.5 驱动程序和发行说明在这里:http://kb2.adobe.com/cps/000/42dcb10a.html
发行说明表明它可以解决您的确切问题
【讨论】:
以上是关于在 ColdFusion 中如何使用 in 变量获取 Oracle 存储过程以返回值?的主要内容,如果未能解决你的问题,请参考以下文章