2011-05-05 1 views
1

문 실행으로 인해 실패 ...IBM solidDB에는 결과를 가져 오는 것은 어떤 결과 엔 내가 많이하고 있어요 내 저장 프로 시저에서

EXEC의 SQL은 FETCH ...

EXEC의 SQL은 EXECUTE를

그러나 실행 문이 아무 것도 반환하지 않고 결과를 가져 오는 중 일부 오류 (오류 23506 : 커서의 끝)가 발생합니다. 결과를 가져 오기 전에 결과에 아무 것도 포함되어 있는지 확인해야합니까?

나는 SQLSUCCESS 및 SQLROWCOUNT를 시도했지만 SQLSUCCESS는 명령문이 실패하지 않고 아무 것도 반환하지 않을 경우에만 알려주며 SQLROWCOUNT는 삽입, 업데이트 및 삭제에서만 작동합니다. select 문은 아닙니다.

+0

코드를 게시해야 할 수도 있습니다. –

답변

1

This reference은 DB2와 SolidDB 프로 시저를 비교합니다.

"목록 15. 결과 세트의 끝을 보여주는 SQLSUCCESS"절에서 IBM 참조 서에이 스 니펫이 나와 있습니다. 페치 커서 문이 을 실패하고 이 SQLSUCCESS의 값이 0으로 설정하고 루프가 종료 WHILE이 검색에 다른 행을 찾을 수없는 경우

EXEC SQL FETCH sel_tab; 
WHILE SQLSUCCESS LOOP 
    EXEC SQL FETCH sel_tab; 
END LOOP 

는 또한

을 말한다. 거의 첫 번째 EXEC SQL FETCH 행을 찾을 수없는 경우 WHILE 루프도 입력 할 수 없습니다 을 알려줍니다

. 하지만 코드에서 그런 일이 일어나지 않는다고 제안하는 것 같습니다.

나중에 "표 7. solidDB SQLERROR. cursorname 문의"에서이 코드를 보여줍니다. (내 주석.)

"CREATE PROCEDURE tabs_in_schema (schema_nm 
    VARCHAR) RETURNS (nr_of_rows INTEGER) 
BEGIN 
    DECLARE tab_nm VARCHAR; 
    EXEC SQL PREPARE sel_tab      -- A SELECT statement 
    SELECT table_name FROM sys_tables 
        WHERE table_schema = ?; 
    EXEC SQL PREPARE ins_tab 
     INSERT INTO my_table (table_name, 
      schema) VALUES (?,?); 
    nr_of_rows := 0; 
    EXEC SQL EXECUTE sel_tab USING    -- Executes the SELECT 
     (schema_nm)INTO (tab_nm); 
    EXEC SQL FETCH sel_tab;      -- EXEC SQL FETCH first row 
    WHILE SQLSUCCESS LOOP       -- Like listing 15 
     nr_of_rows := nr_of_rows + 1; 
    EXEC SQL EXECUTE ins_tab USING 
      (tab_nm, schema_nm); 
    IF SQLROWCOUNT <> 1 THEN 
     RETURN SQLERROR OF ins_tab; 
    END IF; 
    EXEC SQL FETCH sel_tab;      -- FETCH subsequent rows 
    END LOOP 
END"; 

난 당신이)

SELECT COUNT(your_column_name) 
FROM your_table 
WHERE ...; 

COUNT (같은 것을 실행할 수 항상 긴 쿼리가 유효 적어도 하나의 행을 반환합니다 가정합니다. 그러나 그것은 데이터베이스에 대한 더 많은 왕복을 포함합니다. 난 당신이 행을 가져 오려고 노력하는 관용구에 집착하고 오류를 잡는 것이 낫다고 생각합니다.

+0

나는 하나의 행을 가져오고 여러 행을 반복하지 않는 것에 대해서만 생각하고 있습니다. 그러나 문제는 동일하며 가져 오는 행이 없을 때 SolidDB 오류로 인한 첫 번째 EXEC SQL FETCH가 실패합니다. 그래서 EXECUTE와 FETCH 사이의 체크를하고 싶다. 그래서 나는 무엇인가를 가져와야하는지 안다. – user739447

+0

저는 SolidDB에서 그렇게 할 수 없다고 확신합니다. EXEC SQL EXECUTE sel_tab USING ...'sel_tab'에서 준비하고 저장 한 statment를 실행하지만, 서버에서 실행됩니다 - SQLSUCCESS 만 클라이언트에 반환합니다. 내가 놓친 것을 제외하고 SolidDB는 행을 가져 와서 오류를 잡아낼 것으로 기대합니다. –