- 论坛徽章:
- 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://bbs.chinaunix.net/viewthread.php?tid=277036
编译命令如下:- cc -c -o TrimChr.o -I ~/sqllib/include TrimChr.c -D_REENTRANT
- cc -o TrimChr -shared -fpic TrimChr.o
复制代码 请用db2inst1用户编译,编译成功后,将可执行文件COPY到 ~/sqllib/function/下,即/home/db2inst1/sqllib/function/下.- cp TrimChr ~/sqllib/function/
复制代码 最后到数据库中创建自定义函数:- --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;
复制代码 然后就可以直接使用此函数了:- values TrimChr(' aaa bbb ');
复制代码 本人不懂C,主要是不断的查资料,不断的做实验而成功的. |
|