oracle - 在 Oracle SQL Insert 语句中返回自动增量值?
问题描述
我有应该返回自动增量列值的插入语句。这是我的插入示例:
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 完成后获得该值。如何做到这一点?
解决方案
如https://stackoverflow.com/a/34894454/432681中所述,您可以通过相关序列上的 SELECT 检索自动递增的 ID。
因此,您的查询应如下所示:
mySQL = "
INSERT INTO myTable (
First, Last, Email, ActionDate
)VALUES(
:first, :last, :email, :actiondt
);
SELECT "sequenceForMyTable".currval from dual;
";
上面链接的答案中还描述了如何获取序列的名称。
https://stackoverflow.com/a/25268870/432681中概述了第二种方法,CFML 文档中也提到了第二种方法,它说您可以使用该getPrefix()
函数来访问生成的密钥。请注意,在这种情况下result
,是方法返回的对象execute()
,而不是getResult()
(因为查询不返回结果集)。因此,对于您的示例,您可以通过以下方式获取 ID:
result = myQuery.execute();
newID = result.getPrefix().generatedKey;
推荐阅读
- outlook - 使用 office.js 在邮件项目上设置自定义图标
- sql - 在 Moodle 中连接到数据库失败
- flutter - Inkwell onTap 在 ListView.builder 中不起作用
- javascript - 只能通过 HTML Canvas JavaScript 中的 Apple Pencil 进行输入
- regex - 如何改变一个和弦
标记为粗体
- jquery - 无法加载资源和状态文本是 ajax jquery 中的错误
- asp.net - 无法将当前 JSON 数组反序列化为类型模型,因为该类型需要 JSON 对象才能正确反序列化
- python - 如何以三列关系从 SQLAlchemy ORM 中检索正确的对象?
- python - 嗨,当测试包含 os.path.join() 时,我遇到了 runner.invoke() 的问题
- handlebars.js - 像应用程序一样的 vue 中的车把编译错误:期望 'ID',得到 'INVALID'