안녕하세요.
현재 사용하시는 버전이 얼마인지 ?
7.3x나 9.2x의 경우 DECODE나 CASE를 사용하시면
select * from A where DECODE(c, 0, 0, b/c) > 10;
select * from A where (CASE WHEN c = 0 THEN 0 ELSE b/c END) > 10;
을 사용하시면 분모가 0가 되는 것을 방지할 수 있고
그외의 버전에서는 위의 DECODE나 CASE가 지원되지 않으므로
아래와 같이 stored procedure를 사용하여 0로 나누어지는
것을 막습니다.
create procedure div(a smallint, b smallint)
returns smallint;
if (b = 0) then
return 0;
else
return a/b;
end if
end procedure;
select * from A where div(b,c) > 10;
9.1x에서는 위의 stored procedure를 함수로 만들어서도
사용할 수 있습니다.
위의 오류는 서버에서 발생하는 것으로 ESQL/C의 함수로는
해결될 수 없는 것 같습니다... (T_T)
그럼 수고하세요.
::고정현 님께서 쓰시길::
> 안녕하세요. 데이타베이스 초보사용자 입니다.
> 테이블 A에 small int형 컬럼 B,C가 있는데요.
> select * from A where ((B/C) >10)
> 뭐 이런 질의문을 만들어서 결과를 얻을려고 하는데요
> 데이타중에 C가 0인 경우가 있어서 0으로 나누려했다는 에러메시지가
> 발생합니다. 이거 어떻게 해결할수 없을까요?
> esql/c 함수중에 어떤 방법이 있는건지??
> 방법을 제발 알려주세요..감사합니다.
|