2012-05-16 1 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> 

내가 점점 오전 오류가 나는 이것이 내가 액세스 권한이없는 데이터베이스 서버 설정을 완화하는 데 사용할 수있는 생각, 내가 GENERATEDKEY라는 cfquery 등의 기능을 통해 실행했습니다 ORA-00439: feature not enabled: RETURNING clause from this client type

입니다 에. 그러나 GENERATEDKEY 대신 기본 키를 반환 할 수없는 것 같아요, Oracle ROWID 인 AAFO9cAAEAAB8vYAAH 같은 것을 얻을 수 있습니다 ...

+0

고객의 클라이언트 버전은 무엇입니까? SQL * Plus에서 쿼리가 작동합니까? –

답변

0

연결된 문서에 따르면 쿼리의 generatedkey 멤버가 없습니다 결과. 거기에 mySQL에 대한 generated_key지만 오라클에 대한 ROWID, 비록 "오라클 만이 삽입 된 행의 ID가.이 ID를 기반으로 행을 검색 할 수 있지만 이것은 행의 기본 키가 아닙니다." 나는 하나에서 다른쪽으로 매핑하는 방법을 잘 모르겠다. 명령문의 RETURNING 부분을 생략하면 ROWID에 대한 항목이 있습니까?

+0

OP에 'ORA-00439'이 표시됩니다. 'ID'는 컬럼 이름입니다 (oracle에서 return 절을 사용하는 방법입니다). 그렇지 않은 경우 'ORA-00904 invalid identifier'가 표시됩니다. –

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;