2011-01-28 7 views
1

select 문을 반환하는 저장 프로 시저를 만들 필요가 있습니다.Informix 저장 프로 시저 반환 값

출력을 다른 테이블에서 액세스 할 수 없으므로 임시 테이블에 출력 할 수 없도록 Java 응용 프로그램에서 호출해야합니다. 그래서 기본적으로 스토어드 프로 시저를 호출하여 반환 값에서 배열리스트를 생성해야합니다.

반환되는 데이터는 select * from table입니다.

답변

0

저장 프로 시저가 값을 반환 한 SELECT 문인 것처럼 처리하십시오.

ESQL/C와 같은 언어에서는 'EXECUTE PROCEDURE'문을 준비한 다음 커서를 선언하고 OPEN, 루프에서 FETCH 및 CLOSE를 차례로 선언합니다. 유사한 작업은 JDBC와 Java에서도 작동해야합니다. 준비 및 실행 단계를 분리 할 필요가없는 가능한 차이점이 있습니다.


나는 '자바'라고 말할 수있다. 그것은 'C'로 시작합니다 ... 그렇지 않습니까? 'C'처럼?

는 ESQL/C에서, 당신이 (오류 검사 및 변수 선언을 무시) 작성합니다

EXEC SQL PREPARE prep_stmt FROM "EXECUTE PROCEDURE CursoryProcedure(?,?,?)"; 
EXEC SQL DECLARE cursor_nm FROM prep_stmt; 
EXEC SQL OPEN cursor_nm USING :hostvar1, :hostvar2, :hostvar3; 
while (SQLCODE == 0) 
{ 
    EXEC SQL FETCH cursor_nm INTO :receiver1, :receiver2, :receiver3, 
            :receiver4, :receiver5, :receiver6; 
    if (SQLCODE != 0) 
     break; 
    ...use the values in the receiverN variables... 
} 
EXEC SQL CLOSE cursor_nm; 
EXEC SQL FREE cursor_nm; 
EXEC SQL FREE prep_stmt; 

물음표가 저장 프로 시저에 전달 된 입력 값을 나타내는 세 자리; 값은 OPEN 조작에서 값으로 전달됩니다. 저장 프로시 저는 하나 이상의 데이터 행을 (0 또는) 반환 할 수 있습니다. 각 행은 그림과 같이 차례대로 처리됩니다. 당신이 JDBC로 위의 ESQL/C를 변환하는 방법을 일을해야 할 것 - 이제

select_str = "SELECT * FROM A_Table WHERE Col1 = ? AND (Col2 = ? OR Col3 < ?)"; 
EXEC SQL PREPARE prep_stmt FROM :select_str; 

:

그 코드와 SELECT 문을 처리 사이의 유일한 차이점은 PREPARE 라인입니다. ESQL/C에서는 무료 운영에 대해 걱정할 필요가 없을 것입니다. 심지어 두 가지 중 하나가 중복 될 수도 있지만 무해합니다. 그러나 PREPARE, DECLARE, OPEN, FETCH-in-a-loop 및 CLOSE 시퀀스는 복제해야합니다.


난 당신이 설명서를 읽고 인포믹스 저장 프로 시저를 작성하는 방법을 알 수 있으리라 믿고있어,하지만 단지의 경우 :

CREATE PROCEDURE CursoryProcedure(i INTEGER, j CHAR(10), k DATE) 
    RETURNING CHAR(20) AS v1, INTEGER AS v2, DATE AS v3, 
       VARCHAR(255) AS v4, INTEGER AS v5, INTEGER AS v6; 
    DEFINE v1 CHAR(20); 
    DEFINE v2 INTEGER; 
    DEFINE v3 DATE; 
    DEFINE v4 VARCHAR(255); 
    DEFINE v5 INTEGER; 
    DEFINE v6 INTEGER; 
    FOREACH SELECT * 
       INTO v1, v2, v3, v4, v5, v6 
       FROM Table 
      WHERE Col1 = i AND (Col2 = j OR Col3 < k) 
     RETURN v1, v2, v3, v4, v5, v6 WITH RESUME; 
    END FOREACH; 
END PROCEDURE; 

이 작업을 수행하는 더 많거나 적은 최소한의 절차 - 데이터로 더 많은 것을하지 않고 선택한 값을 반환하는 절차를 자주 작성하지는 않습니다.

+0

내가 저장 프로덕션을 작성할 때 select 문을 선언하지만 informix 요청을 통해 임시 테이블에 출력을 넣습니다. 내가 직접 쿼리를 실행하는 것처럼 출력을 얻고 싶습니다. – glenn