UDF 하하 ... 제가 정말 원하던 기능인데요~~
ACCESS 에서는 스크립트 SQL 이라구 해서 ... 베이직으로 사용자 정의 SQL 함수를 만드는 기능이 있조~~
하지만 .. 그걸 일반 어플에서 사용할수는 없었구요~ 단하나 .. 삼성에서 이즈베이스라는 레포트 툴에서 ...
음 제가 이즈 베이스 개발 하셨던 분을 아는데 거기서는 구현했다는 야그를 들었지만 ...
암튼 ... MySQL 도 UDF 를 지원 합니다 ... 4.0 부터요~ 아직 4.0이 정식 릴리즈 되지 않았지만 ...
음 근디 인터 베이스도 지원 한다구 하니~~ 흠 ...
좋네여~~ 아주 ... 고를수 있는 선택권이 있다는게~~
MySQL 이랑 진짜 쌈이라도 함 부쳐봐야 겠네요~~
그럼
박지훈.임프 님이 쓰신 글 :
: 잘 찍으셨네요. ^^ User Defined Function 맞습니다.
:
: SQL문에서 쓰는 함수 있지요? 예를 들어서, MAX(), COUNT(), 이런 거 말입니다.
: 쿼리 쓸 때 이런 함수가 적으면 당연히 불편할텐데...
: 그래서 오라클이나 MS SQL같은 경우 엄청나게 많은 함수들이 있지요.
:
: 그런데 인터베이스를 설치해놓고 ISQL(오라클의 SQL-net같은 건데 더 비주얼하지요) 쿼리문에서 함수를 써보면,
: COUNT(), MAX(), MIN(), SUM() 등 지원되는 함수가 10개도 안됩니다.
: 하다못해, 문자열 대소문자 변환 함수도, UPPER()는 있는데 LOWER()가 없습니다. 허덕~~!
: 인터베이스도 명색이 잘 팔아먹던, 그리고 지금도 잘 팔아먹고 있는 RDBMS인데 함수가 요것밖에 없다는게 말이
: 안되지 않습니까.
:
: 그래서 뒤져봤더니.. 인터베이스에서는 SQL에서 이정도만 기본 함수로 지원하고,
: 나머지는 UDF라는 형식의 확장같은 형태로 구현되어 있더군요.
: 이게 DLL(물론 윈도우 버전일 때이고, 유닉스 계열에서는 다른 형태의 바이너리지요)에서 호출하는 함수라는
: 것까지는 알아냈구요. 어떤 방식이든 미리 선언을 해야 쓸 수 있을 거란 것 까지는 찍었는데요.
: 글구 기본으로 지원되는 UDF 라이브러리가 있고, 제가 필요한 LOWER()도 포함되어 있다는 것까지 알았습니다.
: 문서를 잘 안뒤져보는 습성이 들어서인지 금방 못찾았던 거였습니다.
:
: 뭐 막히는 것만 있으면 툴만 실행시켜놓고 막 갈구는 버릇이 들어서인지,
: IBConsol(인터베이스 관리 툴입니다)만 엄청 갈구다가 결국 방법을 못알아냈구요.
: 인터베이스 자료실에도 올려놓은 인터베이스 디벨로퍼 가이드를 뒤져보다가 의외로 쉽게 찾았네요.
: (의외로 쉽게 찾은 이유가... 원래 인터베이스에서는 넘 기본적이고 간단한 거였으니까. -.-)
:
: UDF는 인터베이스 SQL인 DECLARE 문으로 함수이름과 포함된 모듈 이름을 지정해서 선언해주면,
: 그 디비에 등록이 되더군요. 예를 들어, 위에서 제가 필요했던 LOWER() 함수같은 경우에는,
: DECLARE EXTERNAL FUNCTION LOWER
: CSTRING(80) CHARACTER SET NONE
: RETURNS CSTRING(80) CHARACTER SET NONE FREE_IT
: ENTRY_POINT 'IB_UDF_lower' MODULE_NAME 'ib_udf';
: 이렇게 날려주면 됩니다.
: 이렇게 하면 IBConsol에서 해당 디비를 열었을 때 External Functions에 함수 리스트로 나타나구요.
: 이후로는 SQL문에서 쓸 수 있지요.
:
: 앞에서도 말했다시피, 사용자가 직접 만드는 것 외에 인터베이스가 기본으로 지원하는 UDF 라이브러리가 있는데,
: ib_udf.dll이라는 하나의 DLL로 되어 있습니다. 그외에 파이어버드에는 fbudf.dll가 더 들어있구요.
: (이놈들의 소스까지 다 포함되어 있지요.)
: 함수 하나하나 다 선언하는 것이 귀찮으면, 해당 UDF 모듈의 모든 함수의 SQL문이 포함된 ib_udf.sql, fbudf.sql
: 을 열어서 몽땅 실행해버리면 한방에 등록되겠지요.
:
: 그리고 dll이니깐 당연 빌더나 델파이, 하다못해 비주얼C++에서도 만들 수 있구요.
: 네이티브로 함수를 만들어서 확장하는 거니까 당연 시스템 접근성이나 확장성은 짱이지만,
: 그만큼 잘못 만들었을 경우의 위험도 상당하겠더군요. (마치 ASP보다 ISAPI가 위험하듯이..)
:
: 어.. 쓰다보니 UDF 개론처럼 되어버렸는데... ^^
: 쓴 김에 마저 써보면...
: 지금까지 제가 인터베이스를 써보면서 느낀 인터베이스만의 장점들을 들어보면...
:
: 1. 공짜다!
: - 공개소스로 개발중인 파이어버드 1.0, 혹은 볼랜드에서 2년전에 최초로 공개했던 인터베이스 6.0
: 물론 볼랜드에서 계속 개발을 계속하면서 판매중인 버전 6.5는 논외임.
: 2. 빠르다!
: - RDBMS로서는 엄청나게 빠릅니다. mySQL하고 한번 쌈을 시켜보고 싶은데...
: 설령 mySQL이 조금쯤 더 빠르다고 하더라도 RDBMS로서의 모든 기능을 풀로 갖춘 인터베이스와는 쨉이 안될 거임
: 3. UDF
: - SQL 함수들을 사용자가 직접 C++, 델파이 등으로 만들 수 있으므로 확장성이나 성능 모두 짱임다.
: 4. embeded RDBMS
: - 인터베이스는 다른 프로그램의 설치 프로그램안에 포함시켜서 함께 설치할 수 있습니다.
: (오라클을 인스톨실드 설치 프로그램 안에 포함시킨다는 생각 해보셨슴까?)
: 이걸 위해 인터베이스는 별도의 인스톨 API를 지원하네요.
: 5. 빌더/델파이에서 쓰기가 아주 편하다
: - 빌더/델파이에 포함되어 있는(그리고 계속 업그레이드 버전이 나오고 있는) 인터베이스익스프레스(IBX),
: 이거 아주 쓸만합니다. 인터베이스 API를 네이티브로 접근하기 때문에 오버헤드도 거의 없고,
: 아주 가볍습니다.
: 6. 아주 간편하다
: - 인터베이스 설치 프로그램이 커봤자 2~5메가 사이이기 때문에 아주 간편하지요.
: 또 인터베이스는 로컬DB로 써도 충분할 정도로 빠르고 편리한데, 로컬로 쓸 때는 gds32.dll 파일 하나만
: 배포하면 땡입니다. 인터베이스 디비 시스템을 함께 설치할 필요도 없지요.
: 7. select first.. skip..
: - 이건 MS SQL의 select top..과 비슷합니다. 셀렉트한 결과에서 상위 몇번째부터 몇개만 돌려주지요.
: 이런 특성은 웹환경에서 리스팅할 때 아주 많이 사용되는데, MS-SQL에서는 "몇번째부터"라는 표현이 없구요.
: 오라클에서는 ROWCOUNT 였던가를 썼었는데, 그것보다 훨씬 강력합니다.
: 이건 파이어버드만 지원하는데, 최근에 출시된 상용버전인 인터베이스 6.5에서는 다른 문법으로 같은
: 기능이 추가되었습니다.
:
: 장점이 아주 많지요?
: 불편한 점도 몇가지 있는데... 대표적인 것은, from 절에서 select의 결과를 쓰지 못한다는 겁니다.
: 그러니까, select ... from (select ... ) ... 이런 식은 안됩니다.
: 그외에도 몇가지 단점이 있었는데 기억은 잘 안나구요.
:
: 이거, 쓰다보니 또 장황하게 늘어놔버렸군요.
: 이걸 정리해서 담에 팁이나 하나 올릴까?
:
: 기럼...
:
:
: 최보현.U&I 님이 쓰신 글 :
: : 유앤아이 현지아빠입니다.
: :
: : 증말 수고 하셨습니다. 이번 사이트 개편으로 임프님은 ... 스킬업을 하신듯 합니다 ..ㅋㅋㅋ
: :
: : UDF .. User Define Function 맞나요~~
: :
: : 개념 설명점~~ ㅋㅋ
: :
: : 그럼
|