2012-05-16 4 views
1

Вот запрос, который я запускаю.RETURNING ... INTO ... предложение об ошибке с Oracle и ColdFusion

<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 ...

+0

Какая у вас версия клиента? ваш запрос работает с sql * plus? –

ответ

0

В соответствии с документами, которые вы связали, не существует сгенерированного ключевого члена запроса результат. для mySQL есть сгенерированная_key, но для oracle это ROWID, хотя документы говорят об этом только «Oracle». Идентификатор вставленной строки. Это не первичный ключ строки, хотя вы можете извлекать строки на основе этого идентификатора ». Я не уверен, как можно сопоставить друг с другом. Если вы не укажете часть заявления RETURNING, вы получите что-нибудь для ROWID?

+0

OP получает «ORA-00439». «ID» - это имя столбца (так вы используете предложение о возврате в oracle). Если бы это было не так, у него был бы «неправильный идентификатор ORA-00904» –

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; 
Смежные вопросы