- 論壇徽章:
- 0
|
問題解決了.
C代碼如下:- #include <string.h>
- #include <memory.h>
- #include <sqludf.h>
- #define ISSPACE(x) ((x)==0x00 ||(x)==0x01 ||(x)==0x02 ||(x)==0x03 ||(x)==0x04 ||(x)==0x05 ||(x)==0x06 ||(x)==0x07 ||(x)==0x08 ||(x)==0x09 ||(x)==0x0A ||(x)==0x0B ||(x)==0x0C ||(x)==0x0D ||(x)==0x0E ||(x)==0x0F ||(x)==0x10 ||(x)==0x11 ||(x)==0x12 ||(x)==0x13 ||(x)==0x14 ||(x)==0x15 ||(x)==0x16 ||(x)==0x17 ||(x)==0x18 ||(x)==0x19 ||(x)==0x1A ||(x)==0x1B ||(x)==0x1C ||(x)==0x1D ||(x)==0x1E ||(x)==0x1F ||(x)==0x20 )
- void TrimChr( char *String, char *TrimedString )
- {
- char *Tail, *Head;
- for ( Tail = String + strlen( String ) - 1; Tail >= String; Tail -- )
- if ( !ISSPACE( *Tail ) )
- break;
- Tail[1] = 0;
- for ( Head = String; Head <= Tail; Head ++ )
- if ( !ISSPACE( *Head ) )
- break;
- if ( Head != String )
- memcpy( String, Head, ( Tail - Head + 2 ) * sizeof( char ) );
-
- strcpy(TrimedString, String);
- return;
- }
復制代碼 這段代碼是借鑒FH的這個貼子的:
http://www.72891.cn/viewthread.php?tid=277036
編譯命令如下:- cc -c -o TrimChr.o -I ~/sqllib/include TrimChr.c -D_REENTRANT
- cc -o TrimChr -shared -fpic TrimChr.o
復制代碼 請用db2inst1用戶編譯,編譯成功后,將可執(zhí)行文件COPY到 ~/sqllib/function/下,即/home/db2inst1/sqllib/function/下.- cp TrimChr ~/sqllib/function/
復制代碼 最后到數(shù)據(jù)庫中創(chuàng)建自定義函數(shù):- --DROP FUNCTION TrimChr;
- CREATE FUNCTION TrimChr (VARCHAR(400))
- RETURNS VARCHAR(400)
- EXTERNAL NAME '/home/db2inst1/sqllib/function/TrimChr!TrimChr'
- LANGUAGE C
- NULL CALL
- PARAMETER STYLE DB2SQL
- NO SQL
- DETERMINISTIC
- NO EXTERNAL ACTION
- NOT FENCED;
- GRANT EXECUTE ON FUNCTION TRIMCHR(VARCHAR(400)) TO PUBLIC;
復制代碼 然后就可以直接使用此函數(shù)了:- values TrimChr(' aaa bbb ');
復制代碼 本人不懂C,主要是不斷的查資料,不斷的做實驗而成功的. |
|