首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CFscript中提交多个查询事务

问在CFscript中提交多个查询事务
EN

Stack Overflow用户
提问于 2014-08-21 06:06:54
回答 1查看 670关注 0票数 1

我很难找到一次执行多个MySQL语句的正确语法,比如cftransaction。我试图在纯cfscript的CFC中实现这一点。

代码语言:javascript
复制
<cftransaction>
    DROP TABLE IF EXISTS SOME_TEMP_TBL;
    CREATE TABLE SOME_TEMP_TBL AS
    (
        SELECT * FROM ANOTHER_TBL
    );
    DROP TABLE IF EXISTS SOME_TEMP_TBL_2;
    CREATE TABLE SOME_TEMP_TBL_2 AS
    (
        SELECT * FROM ANOTHER_TBL_2
    );
</cftransaction>

因此,我将SQL语句链接成一个字符串:

代码语言:javascript
复制
var SQL = "
    DROP TABLE IF EXISTS SOME_TEMP_TBL;
    CREATE TABLE SOME_TEMP_TBL AS
    (
        SELECT * FROM ANOTHER_TBL
    );
    DROP TABLE IF EXISTS SOME_TEMP_TBL_2;
    CREATE TABLE SOME_TEMP_TBL_2 AS
    (
        SELECT * FROM ANOTHER_TBL_2
    );
";

如果我理解得对,我认为我需要使用事务{}块。但是,我是否把原始的MySQL代码放进去了?目前,我试图将它附加到查询对象上,但是Base.cfc (Railo)抛出了一个错误,表示数据源没有定义。

代码语言:javascript
复制
transaction
{
    qTrans = new Query();
    qTrans.setSQL(SQL);
    qTrans.execute();
    qTrans.setDatasource(variables.instance.datasource.getDSN());

    if (good) 
    {
        transaction action="commit";
    } else {
        transaction action="rollback";
    }
}

也尝试过只使用SQL.execute(),但执行()当然不是为字符串定义的&无论如何,它不会与任何DB相关联.

另外,如果(好的)部分需要吗?默认情况下,如果(很好)测试是否发生了MySQL错误?事务action=是否“提交”了实际发送的SQL脚本?

我是否需要将它们分割成单独的查询对象并按顺序运行?如果是这样,那么在CFscript中设置事务块又有什么意义呢?

我知道我离这里很远,但是我很难在这里浏览CF文档。如果有人知道一个专门用于CFscript引用的好源,我真的可以使用它,因为我很难使用Adobe。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-21 11:58:19

试试这段代码

代码语言:javascript
复制
try {
    transaction {
        qTrans = new Query();
        qTrans.setDatasource(variables.instance.datasource.getDSN());
        qTrans.setSQL(SQL);
        qryRes = qTrans.execute();

        TransactionCommit();
    }
} catch(database e) { 
    TransactionRollback(); 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25419296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档