Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取查询中的自动增量作为变量,以便在另一个查询中使用_Sql_Oracle_Coldfusion - Fatal编程技术网

Sql 获取查询中的自动增量作为变量,以便在另一个查询中使用

Sql 获取查询中的自动增量作为变量,以便在另一个查询中使用,sql,oracle,coldfusion,Sql,Oracle,Coldfusion,我正在插入两张桌子。第一个表中有一个新的“项”。有很多字段,但为了简单起见,我只向您展示我需要的内容。这是我的coldfusion页面: <cfquery> INSERT INTO my_item_table (itemid, a bunch of other stuff) VALUES (itemid_sequence.nextval, a bunch of other stuff) </cfquery> <cfquery> INS

我正在插入两张桌子。第一个表中有一个新的“项”。有很多字段,但为了简单起见,我只向您展示我需要的内容。这是我的coldfusion页面:

<cfquery>
    INSERT INTO my_item_table (itemid, a bunch of other stuff)
    VALUES (itemid_sequence.nextval, a bunch of other stuff)
</cfquery>
<cfquery>
    INSERT INTO my_attachments_table (attachno, itemid, filename)
    VALUES (attachment_sequence.nextval, **AUTO-INCREMENT VALUE HERE**, '#url.fileName#')
</cfquery>
我的问题是我想将自动递增的itemid作为一个值插入另一个表,即文件附件表。相同的coldfusion页面:

<cfquery>
    INSERT INTO my_item_table (itemid, a bunch of other stuff)
    VALUES (itemid_sequence.nextval, a bunch of other stuff)
</cfquery>
<cfquery>
    INSERT INTO my_attachments_table (attachno, itemid, filename)
    VALUES (attachment_sequence.nextval, **AUTO-INCREMENT VALUE HERE**, '#url.fileName#')
</cfquery>
我知道我可以在item表中查询刚刚输入到第一个表中的值,但即使不太可能,用户输入也可能不是唯一的,这意味着对相同字段的查询可能返回多行。在这种情况下,我无法获取itemid。在查询中创建的itemid是唯一的唯一标识符


我的问题是:是否有一种方法可以将auto=increment设置为查询内部的值,以便在外部使用它?如果没有,您建议如何获取我的itemid?谢谢。

您可以通过以下查询将下一个序列值检索到变量中:

SELECT itemid_sequence.nextval FROM DUAL
DUAL是Oracle中的一个虚拟表。然后,您可以继续在两个INSERT查询中使用此变量


另一个选项:在数据库中创建一个存储过程,该过程将为您触发两个查询。

如果您在ColdFusion 8/9/10中执行插入操作,它将在标记的结果属性中返回插入行的ID。例如,如果您使用的是SQL Server,则result_name.IDENTITYCOL是对插入行ID的引用。如果您使用的是MySQL,这是result\u name.GENERATED\u KEY。

我不是Oracle专家-听起来Danny知道他在说什么-但是当你在一个查询中插入CF,然后在下一个查询中获取autoincrement的结果时,你会面临并发问题的风险,因为另一个请求同时增加了字段。确保并使用事务(或Danny建议的存储过程)来避免这种情况。或者,您可以在insert查询中获取增量值,并将其作为结果返回。我如何将其设置为变量?据我所知,您可能会输出这个查询,但没有定义要引用的列名。即,这将如何工作?好的,我知道了:选择itemid_sequence.nextval作为DUALRe的变量名。Brian的回答如下:对于Oracle,它将是result.ROWID,但它不会返回行的键,而这正是您要查找的。请参阅,搜索ROWID。在Oracle中,它将返回不是表主键的行ID。rats。。。我总是忘记从cf8开始。nice brian。很遗憾,这不适用于CF8,MSSQL 2000不会影响海报,只是另一个选项是在SQL Server 2000中,稍后使用INSERT语句后立即返回的@标识值,并将其返回给CF,即:。;选择@@identity作为newID,并引用原始查询的result属性中的标识,即:。;query result.newID。