2012-11-19 5 views
2

Oracle 기능을 HSQLDB로 마이그레이션 할 때 HSQLDB의 "Select into"를 번역해야합니다.HSQL 2.2 루틴에서 SELECT INTO 사용

CREATE FUNCTION getId() 
RETURN NUMBER IS 
     temp_id NUMBER; 
... 

BEGIN 
....  
    SELECT id id INTO temp_id from (select id form .....); 

는 HSQLDB 2.0.0에서 다음 작업을 수행 할 수 있습니다 : 오라클 스크립트처럼 보일 수 있습니다

CREATE FUNCTION getId() 
RETURNS BIGINT 
BEGIN ATOMIC 
    DECLARE temp_id BIGINT; 
.... 

    SET temp_id = SELECT id id FROM .... 

그러나, 그것은 더 이상 HSQLDB 2.2.9에서 작동하지 않습니다. 오류 메시지는 다음과 같습니다

은 [CREATE - 0 행 (들), 0.000 초] [오류 코드 : -5608, SQL 상태 : 42608] 잘못 또는 선언의 데이터에 미치는 영향 절 실종 : SQL은 문을 읽어

HSQLDB 2.2의 릴리스 노트에서 "select into"를 이미 지원한다고 나와 있지만 그 방법을 찾지 못했습니다.

누구나 HSQLDB 2.2.9에서 어떻게하는지 알고 있습니까?

답변

1

2.2.x 시리즈에는 더 엄격한 데이터 액세스 검사가 있습니다. 테이블 데이터를 읽는 루틴은 그와 같이 선언되어야합니다.

CREATE FUNCTION getId() 
RETURNS BIGINT READS SQL DATA 
BEGIN ATOMIC 
    DECLARE temp_id BIGINT; 
.... 

    SET temp_id = SELECT id id FROM .... 

최근 몇 달 동안 더 많은 개선 및 수정이 도입되었습니다. 2.2.9 대신 최신 스냅 샷 jar (및 릴리스 될 때 버전 2.3.0)를 사용하는 것이 좋습니다.

http://www.hsqldb.org/repos/org/hsqldb/hsqldb/SNAPSHOT/

스냅 샷 디렉토리는 메이븐 저장소입니다.