gpt4 book ai didi

sql - 连接到 oracle 数据库的 cfprocparam 未返回 sid

转载 作者:搜寻专家 更新时间:2023-10-30 20:16:26 25 4
gpt4 key购买 nike

有问题的应用程序在 Coldfusion 11 上运行,带有 hotfix 7,并在连接到 Windows 的 Linux 服务器上运行甲骨文数据库。目标是让应用程序在 Linux 上运行,这是一个逐步的过程(这就是为什么数据库在 Windows 服务器 上)。

我知道数据库可以正常工作,因为它通过 Coldfusion 管理员面板成功连接,并且此 SQL 语句成功返回 user_id:

<cfquery name="qUser" datasource="#Application.datasource#">
SELECT td_user_id
FROM td_user
WHERE ROWNUM <= 1
</cfquery>

有问题的代码是这样的:

<cfstoredproc procedure="td_session_pkg.new_session" datasource="#application.datasource#">
<cfprocparam type="In" cfsqltype="CF_SQL_CHAR" value="#arguments.username#">
<cfprocparam type="In" cfsqltype="CF_SQL_CHAR" value="#arguments.password#">
<cfprocparam type="In" cfsqltype="CF_SQL_CHAR" value="#cgi.remote_addr#">
<cfprocparam type="In" cfsqltype="CF_SQL_INTEGER" value="#rand_int#">
<cfprocparam type="In" cfsqltype="CF_SQL_INTEGER" value="#application.app_id#">
<cfprocparam type="In" cfsqltype="CF_SQL_INTEGER" value="1">
<cfprocparam type="In" cfsqltype="CF_SQL_INTEGER" value="#pwdRequired#">
<cfprocparam type="Out" cfsqltype="CF_SQL_CHAR" variable="sid">
</cfstoredproc>

<!--- Test --->
<cfquery name="testS" datasource="#Application.datasource#">
SELECT
sys_context('USERENV','SID') AS theSid
FROM dual
</cfquery>
<cfthrow message="SID: #sid# and #testS.theSid#">

cfthrow 返回

SID: (blank here) and 37

我已经尝试了很多东西,但还没有正确返回 sid(继续用户身份验证需要它)。 cfprocparam 标签中的值是上面提到的变量,并且都具有有效值。

  • Coldfusion 变量区分大小写,如 Adob​​e 所述

关于为什么这不会返回 sid 以及为什么 SQL 语句会返回的任何见解? (根据我的研究,我相信它们是同一回事)。

感谢您的帮助,我会尽快回答任何问题。

最佳答案

由于我在评论中发布的代码有空格:

SET SERVEROUTPUT ON;

DECLARE
sid VARCHAR2(20);
BEGIN
td_session_pkg.new_session(
'username',
'password',
'remote_addr',
0,
0,
1,
0,
sid
);
DBMS_OUTPUT.PUT_LINE( 'SID' || sid );
END;
/

在您将通过 ColdFusion 连接到的用户的 SQL 客户端(即 SQL 开发人员或 SQL/Plus)中运行它。

目的是测试数据库:

  1. 有手续。
  2. 数据库用户可以访问它。
  3. 程序在数据库中运行。
  4. 程序给出了预期的结果。

成功运行查询会告诉您#1-#3 没问题,您可以根据您的预期检查#4。

如果有任何不符合预期,那么您就知道问题出在数据库端,而不是在 ColdFusion 中。

如果它们按预期运行,那么您可以开始查看 CF 设置以确保您的数据源指向您期望的位置(即它们是否连接到正确的用户)并且数据源具有执行程序的权限。

然后如果一切正确,请查看您传递给 <CFSTOREDPROC> 的变量和 <CFPROCPARAM>标签 - 是预期的数据源和变量。

如果您想在进行时将其形式化,那么您可以编写单元和集成测试,其中涵盖您尝试的步骤,下次您想要测试的时候,您只需运行测试套件。

关于sql - 连接到 oracle 数据库的 cfprocparam 未返回 sid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37604016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com