返回> 网站首页
[转载]SQLITE创建用户自定义函数
yoours2011-09-15 17:16:33
简介一边听听音乐,一边写写文章。
实现一个用户自定义的函数分为两步。首先,写句柄。句柄实现一些你想通过SQL完成的功能。然后,注册句柄,为它提供SQL名称、参数的数量和一个指向句柄的指针。
例如,你想创建一个叫做hello_newman()的SQL函数,它返回文本'Hello Jerry'。在SQLite C API中,先创建一个C函数来实现此功能,如:
void hello_newman(sqlite3_context* ctx, intnargs, sqlite3_value** values)
{
/*Create Newman's reply */
constchar *msg = "Hello Jerry";
/*Set the return value. Have sqlite clean up msg w/ sqlite_free(). */
sqlite3_result_text(ctx,msg, strlen(msg), sqlite3_free);
}
不了解C和C API也没关系。这个句柄仅返回'Hello Jerry'。下面是实际使用它。使用sqlite3_create_function()函数注册这个句柄:
sqlite3_create_function(db,"hello_newman", 0, hello_newman);
第1个参数(db)是数据库连接。第2个参数是函数的名称,这个名称将出现在SQL中。第3个参数表示这个函数有0个参数(如果该参数值为-1,表示该函数接受可变数量的参数)。最后一个参数是C函数hello_newman()的指针,当SQL函数被调用时,通过这个指针来调用实际的函数。
一旦进行了注册,SQLite就知道了当遇到SQL函数调用hello_newman()时,它需要调用C函数hello_newman()来得到结果。现在,你可以在程序中执行SELECThello_newman()语句,它将返回单行单列的文本'HelloJerry'。
如前所述,很多语言扩展允许用各自的语言来实现用户自定义的函数。例如,Java、Perl等。不同的语言扩展用不同的方法注册函数,有些使用其本身语言的函数来完成此项工作,例如,在Ruby中使用block—one。
文章评论
1406人参与,0条评论