我很难找到一次执行多个MySQL语句的正确语法,比如cftransaction。我试图在纯cfscript的CFC中实现这一点。
<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语句链接成一个字符串:
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)抛出了一个错误,表示数据源没有定义。
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。
发布于 2014-08-21 11:58:19
试试这段代码
try {
transaction {
qTrans = new Query();
qTrans.setDatasource(variables.instance.datasource.getDSN());
qTrans.setSQL(SQL);
qryRes = qTrans.execute();
TransactionCommit();
}
} catch(database e) {
TransactionRollback();
}https://stackoverflow.com/questions/25419296
复制相似问题