使用ColdFusion TRANSACTION和数据并发的问题

时间:2016-08-10 07:28:45

标签: coldfusion coldfusion-11

我正在函数顶部的变量中创建并赋值。但不知何故,该值被其他用户的表记录所取代。当两个用户同时使用不同记录进行事务时,就会发生这种情况。它也只是偶尔发生一次。 我在下面的代码中已经在评论中提到了这个问题。

<cffunction name="functionname" output="true"> 
<cfargument name="formData"> 
<cftransaction action="begin"> 
    <cftry>
        <cfquery name="getDoc_no" datasource="#variables.dsn#">
            SELECT CONCAT(TO_CHAR(SYSDATE,'YYYY'),WORK_REQ_SEQ.NEXTVAL)  as NEXT_NO FROM DUAL
        </cfquery>  
        <cfset doc_no_seq=getDoc_no.NEXT_NO> <!---creating variable doc_no_seq --->

        <cfquery name="getWo_no" datasource="#variables.dsn#">
            SELECT  WORK_ORDER_SEQ.nextval  as NEXT_NO FROM DUAL
        </cfquery>  
        <cfset Trns_seq=getWo_no.NEXT_NO>  <!--- creating variable Trns_seq --->

        <cfquery name="insert1" datasource="#variables.dsn#">   
            INSERT into  WORK_ORDER
            (
                DOC_NO, 
                TRANS_ID 
            ) 
            Values 
            (
                <cfqueryparam value="#doc_no_seq#" cfsqltype="cf_sql_integer">, <!--- Inserted CORRECT doc_no_seq value  --->
                <cfqueryparam value="#Trns_seq#" cfsqltype="cf_sql_integer"> <!--- Inserted CORRECT Trns_seq value  --->
            )   
        </cfquery>
        <cfif isdefined("IdnoRes") and IdnoRes gt 0>
            <cfloop from="1" to="#IdnoRes#" index="q">
                <cfif trim(Evaluate("rsc_grp_id_#q#")) is not "" and  trim(Evaluate("qty_#q#")) is not "">
                    <cfquery name="insert2" datasource="#variables.dsn#">       
                        INSERT into REQ_RESOURCE_DTLS
                        (
                            DOC_NO        , 
                            TRANS_ID       
                        )
                        Values 
                        (
                            <cfqueryparam value="#doc_no_seq#" cfsqltype="cf_sql_integer">, <!--- Inserted WRONG doc_no_seq value  --->
                            <cfqueryparam value="#Trns_seq#" cfsqltype="cf_sql_integer"> <!--- Inserted WRONG Trns_seq value  --->
                        )
                    </cfquery>      
                </cfif>
            </cfloop>
        </cfif> 
        <cfif isdefined("Idnojob") and Idnojob gt 0>
            <cfloop from="1" to="#Idnojob#" index="q">
                <cfif trim(Evaluate("frm_des_#q#")) is not "" and  trim(Evaluate("to_des_#q#")) is not "">
                    <cfquery name="insert3" datasource="#variables.dsn#">       
                        INSERT into JOB_SEQ_DTLS
                        (
                            DOC_NO        , 
                            TRANS_ID       
                        )
                        Values 
                        (
                            <cfqueryparam value="#doc_no_seq#" cfsqltype="cf_sql_integer">, <!--- Inserted WRONG doc_no_seq value  --->
                            <cfqueryparam value="#Trns_seq#" cfsqltype="cf_sql_integer">  <!--- Inserted WRONG Trns_seq value  --->
                        )
                    </cfquery>      
                </cfif>
            </cfloop>
        </cfif>     

        <cftransaction action="commit" />
        <cfcatch type="any">
            <cftransaction action="rollback" />          
        </cfcatch>
    </cftry>
</cftransaction> 

<cfreturn 1>

0 个答案:

没有答案