【发布时间】:2019-04-19 19:42:27
【问题描述】:
我有应该返回自动增量列值的插入语句。这是我的插入示例:
myQuery = new query();
myQuery.name = "insertRec";
myQuery.setDatasource("db");
mySQL = "
INSERT INTO myTable (
First, Last, Email, ActionDate
)VALUES(
:first, :last, :email, :actiondt
)
";
myQuery.setSQL(mySQL);
myQuery.addParam(name="first", cfsqltype="cf_sql_varchar", value="#trim(form.first)#", maxlength="50");
myQuery.addParam(name="last", cfsqltype="cf_sql_varchar", value="#trim(form.last)#", maxlength="50");
myQuery.addParam(name="email", cfsqltype="cf_sql_varchar", value="#trim(form.email)#", maxlength="320");
myQuery.addParam(name="actiondt", cfsqltype="cf_sql_timestamp", value="#now()#");
myQuery.execute().getResult();
//result = myQuery.execute().getResult(); This line is commented because I was getting error message that test variable is not defined. Not sure why since test is declared and equals to myQuery.execute().getResult();
我运行此代码后,记录将出现在表格中。结果集如下所示:
RecordID First Last Email ActionDt
7 John Woss jwoss@gmail.com 16-NOV-18
如您所见,RecordID(自动增量)就在那里。我想在 myQuery 完成后获得该值。如何实现?
【问题讨论】:
-
创建一个局部变量,数字或整数,并将插入更改为 INSERT INTO myTable (...) values (...) RETURNING RecordID into local_variable;
-
使用
myQuery.getPrefix().generatedkey。这应该会为您提供查询中插入的 ID。 -
只是一个快速的代码审查:与其将
now()作为参数传递,不如让数据库来做。删除addParam()并将:actiondt替换为sysdate()。主要区别在于now()将返回来自 CF 服务器的时间,而sysdate将是 db 服务器的时间。如果数据库时间没问题,那么使用sysdate将使用更少的资源并且不会有阻塞的可能性。
标签: oracle coldfusion oracle-sqldeveloper coldfusion-10 cfml