PostgreSQL用C完成存儲過程例子

d3fw 9年前發布 | 16K 次閱讀 PostgreSQL 數據庫服務器

目的:用C完成一個存儲過程例子,存儲過程實現對表某一段進行update。

準備工作

1、安裝數據庫

2、建立表test

highgo=# create table test(id int, name text, label int);
CREATE TABLE

3、建立C文件,C代碼如下:

#include "postgres.h"
#include "executor/spi.h"
#include "utils/builtins.h"

#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif

int mydelete(int key);

int
mydelete(int key)
{
    char command[128];  //視命令長短建立相應大小的數組
    int ret;
    int proc;                       //對表數據操作的行數

    /* 將命令賦值到command */
    sprintf(command, "update test set label = 0 where id = %d and label = 1; ", key);

    SPI_connect();             //內部鏈接
    ret = SPI_exec( command, 0);  //執行操作
    proc = SPI_processed;       //為行數賦值
    SPI_finish();                //中斷連接
    return (proc);               //將操作行數作為返回結果
}

數據庫api參考文檔:http://www.postgresql.org/docs/9.4/static/spi.html

編譯到安裝

4、gcc編譯

gcc -fpic -I/opt/HighGo/db/20150401/include/postgresql/server/ -shared -o myapi.so myapi.c

5、復制到lib目錄下

cp myapi.so /opt/HighGo/db/20150401/lib/postgresql/

6、加載到服務器

highgo=# load 'myapi';
LOAD

7、建立函數

highgo=# create function mydele(integer) returns integer as '$libdir/myapi.so','mydelete' language c strict;
CREATE FUNCTION
highgo=#

8、效果

highgo=# insert into test values (1,'jim',1);
INSERT 0 1
highgo=# insert into test values (2,'tom',1);
INSERT 0 1
highgo=# select * from test;
 id | name | label 
----+------+-------
  1 | jim  |     1
  2 | tom  |     1

highgo=# select mydele(1);
 mydele 
--------
      1
(1 row)
highgo=# select * from test;
 id | name | label 
----+------+-------
  2 | tom  |     1
  1 | jim  |     0

來自:http://my.oschina.net/Suregogo/blog/406798

 本文由用戶 d3fw 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!