mysql로 UDF를 만들어 사용하려고 하는데...

글쓴이: 익명 사용자 / 작성시간: 수, 2002/10/02 - 4:04오후
mysql을 사용하면서, 최적화를 시키려다가 UDF(User Define Function)쪽
을 보게 되었습니다.
udf를 사용해서 쿼리문을 줄이려고..(이를테면 ㅏㅁ수를 사용해서 일련의
과정을 한번에 수행하려고) 하는데, 레퍼런스나 예제프로그램은 그냥 입력
받은 값을 바꾸는 역할밖에는 못하더군요..^^;;
그러니까 함수인자를 사용해서 DB속의 데이터를 update하거나 하는 내용
은 없던데, 절대로 할 수 없는걸까요?^^;;
Forums:
Re: mysql로 UDF를 만들어 사용하려고 하는데...
저도 UDF를 만들어 써보지는 않았지만,
참고하실만한 사이트 주소입니다.
target=_blank">http//empyrean.lib.ndsu.nodak.edu/~nem/mysql/udf/
Re: mysql로 UDF를 만들어 사용하려고 하는데...
MySQL에서 UDF를 사용하는 이유는
1) 속도 향상
2) 코딩의 간소화
이 정도의 이유가 있습니ㅏㄷ.
속도가 향상되는 이유는, UDF를 사용하지 않는 경우, 먼저 Server가
Client에게 자료를 보낸 뒤에, Client는 받은 자료를 처리한 뒤, 최종
User에 보여지게 됩니다.
이때, Server가 원본 자료를 보내지 않고, Client가 처리할 일을 처리한
뒤, Client에게 전송을 하면 불필요한 자료 전송이 필요 없기 때문에 속도
가 향상되게 되죠.
그런데 질문하신 분처럼 UDF 안에서 UPDATE를 하려면, UDF 안에서 또 새로
운 session을 열어야 합니다. 왜냐하면, UDF의 인자로 쿼리를 실행할 수
있는 것이 없기 때문이죠.
그리고 UDF는 Record를 fetch할 때마다 호출되므로, 매 레코드마다
connection open -> close -> open -> close 를 반복하게 되죠.
아마 이게 더 부하가 많이 걸릴 듯 한데요 ^^
암튼 UDF에서 MySQL C API 함수를 쓰면 SQL을 실행할 수는 있지 않을까 합
니다.(안 해 봐서 정확히는 모르겠습니다.)
질문하신 분께서 원하신 것은 MySQL UDF 대신 MySQL의 소스를 참고하면서
MySQL의 Native function을 추가하면 되지 않을까 하네요.
http//www.mysql.com/doc/en/Adding_native_function.html
여길 한번 읽어 보시구요.
중요한 것은 기존의 connection을 유지한 채 쿼리를 실행할 수 있어야 하
는게 중요하겠죠.
(흠 생각해 보면, Native function에서도 기존의 connection을 이용하여
쿼리를 실행하기 어렵겠군요.)
그럼 이만.
[MySQL][UDF] mysql, udf에서 select 사용?
안녕하세요. :-)
먼저 올라온글이 오래되었네요.
혹시 UDF에서 select를 사용해 보신분 계신가요?
속도와 복잡성 때문에 DB 인덱스로 처리 못하는
검색 기능을 C언어로 만들었습니다.
검색 결과는 primary key 값들이 나열됩니다.
UDF로 나열까지는 해봤는데요.
select를 사용해서 table에서 검색결과 레코드들을
조회시켜보고 싶습니다.
혹시 이렇게 해보신 분 있으시면,
가능한지? 주의할것이 있는지 조언 부탁드립니다.
생각으로는
UDF로 검색결과를 만든 후
connection을 열고,
query함수로 질의를 하고 처리하면 될것 같습니다만,
또, 검색는 웹이 MySQL에 접속해서 사용할것 이거든요.
UDF의 결과를 웹에서 처리하기 쉽게 할 수 있는 방법이 있을까요?
조언 부탁드립니다.
Lum7671's Weblog
보통의 경우, UDF는 반환되는 컬럼에 대해 새로운 함수를 적용하고자 할
보통의 경우, UDF는 반환되는 컬럼에 대해 새로운 함수를 적용하고자 할 때 사용을 하고 (예를 들어, select a_col, new_function(b-col) from a_table), 내용상 하고자 하는 것에는 stored procedure가 제격일 듯 합니다. 다만, MySQL에서는 버전 5 이상에만 이 기능이 있고, c로 된 외부 프로그램을 stored procedure로 생성하는 것은 아직은 지원이 안되는 것으로 알고 있습니다.
----
I paint objects as I think them, not as I see them.
atie's minipage
[quote="atie"]보통의 경우, UDF는 반환되는 컬럼에 대해 새
답변 감사드립니다.
개발에 참고 하겠습니다. :-)
다른 질문을 하나 하겠습니다.
혹시 UDF에서 출력 결과를
인위적으로(?)로 레코드 단위(row)로 출력하는 방법을 아시나요?
UDF로 만든 함수로 "음식점"을 검색해서 검색결과가 "결과1", "결과2", "결과3", "결과4" 이렇게 4개가 나온다고 하면,
현재는
return 변수에
sprintf(result, "%s, %s, %s, %s", r1, r2, r3, r4);
해서 다음과 같이 결과 가 나오거든요.
나온 결과를 웹쪽에서 사용할때
sql의 join과 같이 사용할 수 있도록,
결과 하나 하나를 레코드 단위로 쪼개고 싶습니다.
이렇게 가능 할까요?
Lum7671's Weblog
그냥 간단히 생각해서, 이차 처리를 하면 되지 않을까요?반환 되는 결
그냥 간단히 생각해서, 이차 처리를 하면 되지 않을까요?
반환 되는 결과의 갯수가 항상 같다면, 쉽게 라인별로 분할할 수 있을거고, 다르다면 myfunc에서는 하나의 열로 반환하지만 컬럼의 자리수를 유지하면 라인별로 쪼깰 수 있을텐데요.
----
I paint objects as I think them, not as I see them.
atie's minipage
Re: mysql로 UDF를 만들어 사용하려고 하는데...
안녕하세요. :-)
UDF를 사용하는것이 session을 열고 들어가서 하지 않습니까?
UDF 안에서 TEMPORARY TABLE을 사용해서 공유를 하려고 하니 막막하군요.
UDF의 사용을 위해서 열은 session으로 TEMPORARY TABLE을 만들 수 있어야 할것 같습니다.
session이 틀려지면, TEMPORARY TABLE에 접근이 안된다고 알기 때문에...
혹시 UDF 에서 현재 접속되있는 session 을 가져오는 방법이 있나요?
"허정수"님은 없다고 하셨는데 혹시 해서 다시 질문 드립니다.
Lum7671's Weblog
댓글 달기