oracle - 使用Oracle's “INSERT … RETURNING … INTO”语句的ColdFusion

标签 oracle coldfusion

我正在使用ColdFusion构建一个简单的聊天应用程序,并且在运行插入程序时尝试获取消息ID。这是我到目前为止所拥有的

<cffunction name="putMessage" access="remote" returnformat="JSON">

     <cfargument name="message" />
     <cfset LOCAL.id = 0 />

     <cfquery name="insertquery" datasource="myDS"> 
          insert into 
               chat (message) 
          values 
               (<cfqueryparam cfsqltype="cf_sql_varchar" value="#ARGUMENTS.message#">)
          RETURNING
               id
          INTO
               <cfqueryparam cfsqltype="cf_sql_numeric" value="#LOCAL.id#">
     </cfquery>

     <cfreturn LOCAL.id />
        
</cffunction>
我得到的错误是

执行数据库查询时出错。
并非所有返回参数都已注册

我知道存储过程和运行多个查询都有解决方法。我想知道怎么做。

最佳答案

这是一个古老的问题,因此请您提前为死灵法道歉。在我看来,最好的(也许是唯一的)方法是通过将INSERT语句包装在存储过程中,并从RETURNING ... INTO子句中的值返回到输出参数中。

CREATE OR REPLACE PROCEDURE chat_insert
  ( p_message IN VARCHAR2, r_id OUT NUMBER )
AS
BEGIN
  INSERT INTO chat ( message )
  VALUES ( p_message )
  RETURNING id INTO r_id;
END;
/

然后,您可以从ColdFusion调用此存储过程,如下所示:
<cffunction name="putMessage" access="remote" returnformat="JSON">
    <cfargument name="message" />
    <cfset LOCAL.id = 0 />

    <cfstoredproc procedure="chat_insert" datasource="myDS">
        <cfprocparam cfsqltype="CF_SQL_VARCHAR" type="in" value="#ARGUMENTS.message#" />
        <cfprocparam cfsqltype="CF_SQL_VARCHAR" type="out" variable="LOCAL.id" />
    </cfstoredproc>

    <cfreturn LOCAL.id />
</cffunction>

希望这可以帮助。

关于oracle - 使用Oracle's “INSERT … RETURNING … INTO”语句的ColdFusion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10954033/

相关文章:

database - 对表空间 'USERS' 没有特权

sql - 如何在 Oracle SQL Developer 中执行超过 100 万次插入查询?

java - CentOS8.2上安装oracle 18c时如何设置java.library.path?

java - 将 ColdFusion Java 哈希函数移植到 Ruby

javascript - 简单的 html/javascript

oracle - 在oracle中减去时间戳返回奇怪的数据

java - oracle数据库换行符

coldfusion - 目录列表被拒绝 :This Virtual Directory does not allow contents to be listed

php - ColdFusion 中的 PHP 数组相当于什么?

java - 现在使用 PubNub 时遇到问题(java 对象)