sid不是由连接到oracle数据库的cfprocparam返回的

时间:2016-06-03 00:07:10

标签: sql database oracle coldfusion coldfusion-11

相关应用程序在Coldfusion 11hotfix 7运行,并在连接到Linux的{​​{1}}服务器上运行。目标是使应用程序在Windows Oracle database上运行,这是一个循序渐进的过程(这就是数据库在Linux上的原因)。

我知道数据库有效,因为它通过Windows server管理员面板成功连接,而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#"> 返回

  

SID :(此处为空白)和37

我已经尝试了很多东西,但还没有正确地返回cfthrow(需要继续用户身份验证)。 sid标记内的值是上述变量,并且都具有有效值。

  • Coldfusion变量区分大小写,如Adobe
  • 所述

有关为什么这不会返回cfprocparam以及为什么sid语句将会出现的任何见解? (根据我的研究,我认为它们是一样的。)

感谢您的帮助,我愿意并快速回答任何问题。

1 个答案:

答案 0 :(得分:3)

由于我在评论中发布的代码中存在空白区域:

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. 该程序给出了预期的结果。
  5. 成功运行查询会告诉您#1-#3没问题,您可以根据您的预期检查#4。

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

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

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

    如果你想要正式化它,那么你可以写单位&amp;集成测试,涵盖您尝试的步骤,下次您想要测试的东西,您只需运行测试套件。