2009-07-01 3 views
4

변경할 수없는 Oracle 데이터베이스에 PL/SQL 함수가 있습니다. 이 함수는 엔터티를 식별하고 해당 엔터티의 복사본을 만든 다음 복사본의 ID를 반환하는 매개 변수를 사용합니다. 이Hibernate를 통한 PL/SQL 함수의 리턴 값 얻기

기능의 copy_entity (번호 ID) RETURN 번호

나 최대 절전 모드에서이 함수를 호출 할 필요가

같이 보입니다. (: ID) 나는

CALL의 copy_entity 비슷한으로 명명 된 SQL 쿼리 생성 시도 쿼리로

을하지만,이에서 나는 함수의 반환 값을 얻을 수 없습니다. Hibernate의 "return-scalar"와 유사한 옵션은 반환 할 열 이름을 필요로하며 열 이름이 없습니다. 이 날 이끌어

SELECT copy_entity (: ID) newEntityId AS

"-돌아 스칼라"열 이름으로 newEntityId를 사용하지만, 오라클은 그때 호출 할 수 없습니다 예외가 발생하기 때문에이 또한 작동하지 않았다와

INSERT (복사본을 저장) SELECT.

그런 PL/SQL 함수의 리턴 값을 얻는 방법이 있습니까? 이 함수는 사실 훨씬 더 복잡하고 여전히 앱의 다른 부분에서 필요하므로 다시 작성하는 것은 실제로 선택 사항이 아닙니다. myresult = copy_entity (: ID) 을 시작

: 나는/희망

+0

"DUAL에서 rtnID로 copy_entity (id)를 선택 하시겠습니까?" – dpbradley

+0

아니요. SELECT에서 삽입 또는 업데이트 할 수 없으므로 ORA-14551 예외가 발생합니다. –

답변

1

는 익명 PL/SQL 블록을 사용할 수 있다고 생각합니다; 끝;

이제 결과로 '열 이름'myresult가 생겼습니다.

최대 절전 모드를 사용 해본 적이 없어서 작동하기를 바랍니다. 나는 Hibernate가 얼마나 유연한지를 모른다.

+1

나는 당신이 올바른 길에 있다고 생각합니다. 순수한 JDBC에서는 호출 가능 명령문에 out 매개 변수가 있습니까? 반환 값을 보관 유지합니다. Hibernate는 비슷한 것을 허용해야합니다. –

1

나는 곧은 JDBC를 사용하여 붙어 있다고 생각합니다. 최대 절전 모드 문서는 오라클에 대한 제한 섹션이있다 : Oracle의

는 다음과 같은 규칙이 적용

함수는 결과 셋을 반환해야한다. 프로 시저 의 첫 번째 매개 변수는 결과가 으로 설정되는 OUT이어야합니다. 이것은 Oracle 9 또는 10에서 SYS_REFCURSOR 유형을 사용하여 수행됩니다. Oracle에서는 REF CURSOR 유형을 정의해야합니다. 자세한 내용은 에 대한 Oracle 문서를 참조하십시오.

이 함수는 숫자를 허용하고 Hibernate에서 운이 좋지 않은 숫자를 반환하므로 간단한 JDBC를 만드는 것이 더 나을 것입니다. CallableStatement.