返回> 网站首页 

[转载]SQLITE创建用户自定义函数

yoours2011-09-15 17:16:33 阅读 1406

简介一边听听音乐,一边写写文章。

    实现一个用户自定义的函数分为两步。首先,写句柄。句柄实现一些你想通过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条评论