RETURNING ... INTO ...子句抛出Oracle和ColdFusion的错误

时间:2012-05-16 12:12:50

标签: oracle coldfusion oracle10g coldfusion-9

这是我正在运行的查询。

<cfquery name="myquery" datasource="mydatasource">
    INSERT INTO 
        myTable (myfield) 
    VALUES 
        (<cfqueryparam cfsqltype="cf_sql_varchar" value="#ARGUMENTS.myValue#" />)
    RETURNING
        id INTO <cfqueryparam cfsqltype="cf_sql_varchar" value="#LOCAL.myid#" />    
</cfquery>

我得到的错误是ORA-00439: feature not enabled: RETURNING clause from this client type

我在cfquery中遇到了一个名为GENERATEDKEY的功能,我认为这可以用来缓解我无法访问的任何数据库服务器设置。但是我似乎无法让GENERATEDKEY返回我的主键,而是得到类似AAFO9cAAEAAB8vYAAH的东西,这是Oracle rowid ......

2 个答案:

答案 0 :(得分:0)

根据您链接的文档,查询结果中没有generatekey成员。 mySQL有一个generated_key,但对于oracle来说它是ROWID,虽然文档说这只是“Oracle。插入行的ID。这不是行的主键,尽管你可以根据这个ID检索行。”我不知道如何从一个映射到另一个。如果省略语句的RETURNING部分,你会得到ROWID的任何内容吗?

答案 1 :(得分:0)

我不熟悉coldfusion,可能有一些简单的解决方案 但如果没有,解决方法可能是创建一个使用returning clause的存储过程并对其进行返回。
这样您就可以调用存储过程。

create or replace function insert_my_table(my_value varchar2) return number is
   i number;
begin
   insert into my_table (value_col_name) values (my_value) returning id into i;
   return i;
end insert_my_table;