몇일전 파이어버드 와 오라클 겸용 쿼리를 만들고 진행중 황당한
사고가 있어서 올립니다.
substr는 UDF로 ib_udf.dll에서 지원합니다. 그래서 전 오라클와
명칭도 같고
해서 함수가 같은 줄 알았는데 아니더군요
substr('ABCDEF', 2, 3) 이면 결과값이 'BCD'로 나올줄 알았는데
에고 'BC'가 나오더군요
함수 Description을 보니 다음과 같이 정의 되어 있습니다.
* Functional description:
* substr(s,m,n) returns the substring
* of s which starts at position m and
* ending at position n.
* Note: This function is NOT limited to
* receiving and returning only 255 characters,
* rather, it can use as long as 32767
* characters which is the limit on an
* INTERBASE character string.
* Change by Claudio Valderrama: when n>length(s),
* the result will be the original string instead
* of NULL as it was originally designed.
쩝 첫번째 파라미터 가 시작점이고 두번째 파라미터가 길이가 아닌
종착점입니다.
물론 substring이라는 함수는 있지만 위에서 말씀드렸듯이 공용이다
보니 쓸 수 없죠
결국 substr를 지우고 substr를 다시 만들어 사용합니다.
혹시라도 ib_udf.dll에 있는 substr를 사용할 시에는 이 점
유의하세요
PS : 오라클의 nvl, decode 같은 것들은 case로 다 바꾸고 하니
어렵지 않으나
3~4단 inline view는 조인절로 바꿀려고 하니 쉽지 않네요 에고..
힘들다...
불행중 다행으로 기존 오라클로 작성된 것이 Procedure가 없다는 것
ㅋㅋ
왜 파이어버드는 다른 디비와 틀린 방식으로 Procedure를 지원하는
지 모르겠음 만약
있었으면 조금 더 어려웠을텐데 쩝
|