我有两个不同的CF11应用程序,它们有两个不同的数据源,每个数据源在同一个Oracle 12g数据库上都有自己的后端架构。在一个数据源dsA中,当我使用CFQUERY插入新记录时,结果结构包含GENERATEDKEY值。在datasource dsB中,当我运行完全相同的代码时,结果结构中没有GENERATEDKEY值。
这是我正在运行的测试代码......
<cftry>
<cfset ds = "dsA"/>
<cfquery name="insertTest" datasource="#ds#" result="testResult">
INSERT INTO categories(cat_name)
VALUES ('testing')
</cfquery>
<cfdump var="#testResult#" label="#ds#">
<cfcatch>
<cfdump var="#cfcatch#" label="#ds#"><cfabort>
</cfcatch>
</cftry>
当我将数据源设置为dsA时,我得到了这个输出。注意GENERATEDKEY和ROWID值。
当我将数据源设置为dsB时,我得到此输出,没有GENERATEDKEY且没有ROWID。
据我所知,两个Oracle模式的设置方式相同,两个数据源的配置完全相同。有没有人知道什么可能导致一个查询返回GENERATEDKEY而另一个不返回?我正在试着找出原因。
提前感谢任何建议。
答案 0 :(得分:1)
我和你有同样的问题。 GENERATEDKEY
<cfdump>
中缺少struck
。我再次检查了表,结果发现我忘记将id
字段设置为Primary Key
和Auto Increment
。我改变了桌子,可以再次拿到GENERATEDKEY
。
答案 1 :(得分:0)
好吧,我们从未弄清楚为什么这一个数据源的行为与其他数据源的行为不同。他们都使用相同的驱动程序,但没有其他选项,服务器管理员最终同意将dsB数据源驱动程序更改为Oracle JDBC Thin驱动程序而不是Macromedia驱动程序。这解决了这个问题。
它并没有真正回答基本问题,但是它可以让应用程序再次运行,因此我们现在就可以使用它。