
DB2_num_rows 함수는 결과셋이 있어야만 사용할 수 있습니다. 결과셋이 없을 때 오류가 발생하는 이유는 함수가 결과셋을 기반으로 동작하기 때문입니다.
위 쿼리에서 결과셋이 없을 때 오류가 발생하는 이유는 SYSIBM.SYSDUMMY1 테이블에 레코드가 없기 때문입니다. SYSIBM.SYSDUMMY1 테이블은 비어있는 테이블로, 레코드가 없습니다.
이러한 경우를 해결하기 위한 방법은 다음과 같습니다.
1. 결과셋이 있는 테이블을 사용하세요. 예를 들어, SYSIBM.SYSDUMMY1 테이블 대신 SYSIBM.SYSDUMMY1 테이블에 레코드가 있는 테이블을 사용하세요.
2. WHERE 조건을 사용하여 레코드가 있는 테이블에서 레코드를 필터링하세요. 예를 들어, 다음과 같이 쿼리를 작성할 수 있습니다.
sql
SELECT DB2_num_rows() FROM SYSIBM.SYSDUMMY1 WHERE 1=0
위 쿼리에서 WHERE 조건은 항상 false이기 때문에 결과셋이 생성되지 않습니다. 하지만 DB2_num_rows 함수는 결과셋이 있어도 동작하므로 오류가 발생하지 않습니다.
3. 결과셋이 없을 때 오류를 발생시키지 않도록 함수를 재정의하세요. 예를 들어, 다음과 같이 쿼리를 작성할 수 있습니다.
sql
CREATE FUNCTION DB2_num_rows_no_error()
RETURNS INTEGER
BEGIN
DECLARE num_rows INTEGER;
SELECT COUNT(*) INTO num_rows FROM SYSIBM.SYSDUMMY1;
RETURN num_rows;
END
위 쿼리에서 DB2_num_rows_no_error 함수는 결과셋이 없을 때 오류를 발생시키지 않습니다. 함수는 결과셋이 없을 때 NULL을 반환합니다.
2025-08-11 18:06