GBase 8s数据库支持C和JAVA写的用户自定义例程(UDR),以扩展用户对数据库的操作的功能。
以下我们分别以简单的例子介绍C UDR和Java UDR。

C UDR

C UDR使用C语言为基础开发。
参考两个文档:《用户定义例程和数据类型开发者指南》和《DataBlade开发者工具用户指南》

1, 编写代码,示例使用简单的Hello.c

#include <stdio.h>char *Hello(char *message )
{return(message);
}main()
{char *message = "Hello World!";printf("%s\n", Hello(message));
}

2, 编译成共享库Hello.so

gcc -c -fPIC -o Hello.o Hello.cgcc -shared -o Hello.so Hello.o

3, 将共享库放置于数据库服务器上

比如,放到$GBASEDBTDIR/udr 目录下,则Hello.so的位置为$GBASEDBTDIR/udr/Hello.so

4, 在需要该函数的库里创建相应的函数CDURHello

create function CUDRHello(varchar(255))
returns varchar(254)
with (not variant)
external name '$GBASEDBTDIR/udr/Hello.so(Hello)'
language c;

5, 执行CUDRHello函数

select cudrhello('C UDR返回天津南大通用') from dual;

返回结果: C UDR返回天津南大通用

6, 函数删除

对于C UDR,不再需要该函数了,需要先在数据库删除函数,然后删除对应的共享库。

drop function CUDRHello;

Java UDR

Java UDR实际的功能与C UDR一致。
但需要额外配置SBSPACE空间。

0, 创建sbspace空间

onspaces -c -S sbspace01 -p /data/gbase/sbspace01 -o 0 -s 1024000

更新ONCONFIG配置文件中SBSPACENAME为sbspace01

SBSPACENAME sbspace01

1, 编写代码,示例使用简单的Hello.java

public class Hello {public static void main(String[] args){System.out.println(Hello("Java UDR: Hello World!"));}public static String Hello(String str){return str;}
}

2, 使用JDK1.6(注意,必须使用1.6)编译,并打包成jar文件

javac Hello.javajar -cf Hello.jar Hello.class

3, 将共享库放置于数据库服务器上

比如,放到$GBASEDBTDIR/udr 目录下,则Hello.jar的位置为$GBASEDBTDIR/udr/Hello.jar

4, 设置数据库的JVP环境

ONCONFIG配置文件涉及到JVP的相关参数
1)VPCLASS开启jvp,用于处理Java UDR,默认不开启,取消前面的注释符’#’

VPCLASS jvp,num=1

2)JVPARGS增加 -Dfile.encoding=UTF-8(根据实际需要增加与否,即直接java执行的参数)

JVPARGS -Dcom.ibm.tools.attach.enable=no;-Dfile.encoding=GBK

3)JVPCLASSPATH增加依赖包的路径(如果函数需要额外的依赖包的话)
如:依赖 $GBASEDBTDIR/extend/krakatoa/commons-codec-1.9.jar

JVPCLASSPATH  $GBASEDBTDIR/extend/krakatoa/krakatoa.jar:$GBASEDBTDIR/extend/krakatoa/jdbc.jar:$GBASEDBTDIR/extend/krakatoa/commons-codec-1.9.jar

重启数据库生效,通过onstat -g glo确认已经增加的jvp。

5, 在需要该函数的库里注册jar

execute procedure install_jar("file:$GBASEDBTDIR/udr/Hello.jar", "JUDRHello");

install_jar的参数:jar所在的绝对路径,安装后的名称。

6, 创建相应的例程

create function JUDRHello(varchar(255))
returns varchar(254)
with (not variant)
external name 'JUDRHello:Hello.Hello(java.lang.String)'
language java;

其中function中的 Hello(varchar(255))应与Java中的定义相对应;
external name 为java中的名称: 安装后的名称:java类名.方法

7, 执行JUDRHello函数

select judrhello('Java UDR返回天津南大通用') from dual;

返回结果: Java UDR返回天津南大通用

8, 修改Java UDR例程的操作

修改指定注册名称的对应的jar新路径或者名称
如:JUDRHello使用新的jar包替换掉之前的

execute procedure replace_jar("file:$GBASEDBTDIR/udr/Hello-1.0jar", "JUDRHello");

9,删除Java UDR例程的操作

删除对应的函数

drop function judrhello;

移除对应的注册的jar

execute procedure remove_jar("JUDRHello");

只需要注册的名称。

GBase 8s 编写使用UDR(C/Java)相关推荐

  1. oracle加密可以跟java一致吗,在GBase 8s上使用java udr实现Oracle兼容的加密解密功能...

    最近碰到客户从Oracle迁移到GBase 8s使用到字段加密解密功能,使用到了Utl_raw.cast_to_varchar2.Utl_raw.cast_to_raw.Utl_encode.base ...

  2. GBase 8s SQL 指南:教程———3编写SELECT语句

    3编写SELECT语句 SELECT语句是最重要且最复杂的SQL语句.可使用它和SQL语句INSERT. UPDATE和DELETE操纵数据.可以使用SELECT语句从数据库检索数据.将它用作 INS ...

  3. GBase 8s SQL 指南:教程———6编写高级SELECT语句

    6编写高级SELECT语句 本章中增大了使用SELECT语句可执行的操作的范围.并使您能够执行更复杂的数据库查 询和数据处理.编写SELECT语句着重于SELECT语句语法中的五个子句.本章添加了 G ...

  4. GBase 8s SQL 指南:教程———12 创建和使用SPL例程

    本部分描述如何创建和使用SPL例程.SPL例程是以GBase 8s "存储过程语言"(SPL) 编写的用户定义的例程.GBase 8s SPL是提供流控制的SQL的扩展,诸如循环和 ...

  5. GBASE 8s 数据库 安装与卸载

    1 系统要求 1.1 硬件要求 1.2 操作系统要求 GBase 8s 产品需要部署于 UOS V20 操作系统,鲲鹏920芯片上,建议以 Software Development Workstati ...

  6. GBase 8s 产品架构介绍

    产品架构 GBase 8s 产品构架如图 如图所示,架构图中蓝色部分均为安全数据库产品在通用数据库产品基础之上的安全增强部分. 产品组件模块        服务器组件介绍: 卷: 即 Volume, ...

  7. GBase 8s典型安装

    1.1.1 典型安装 您可以通过使用典型安装设置来快速安装 GBase 8s 及其所有功能部件. 缺省情况下,典型安装设置将创建为您的主机环境配置的即时可用的数据库服务器实例.但是,您可以禁用安装应用 ...

  8. GBase 8s 安装-定制安装

    硬件要求   硬件 最低配置 推荐配置 处理器 1× 2 核 2.0GHz 4×4 核 3.0GHz 内存 4GB 64GB 或更多 硬盘 100GB 1TB 光驱 CD-ROM CD-ROM 系统要 ...

  9. GBase 8s SQL 指南:语法————2.2 SQL 语句

    ALTER ROUTINE 语句 使用 ALTER ROUTINE  语句更改先前定义的用户定义的例程(UDR)的例程修饰符或路径名.该 语句是 SQL ANSI/ISO  标准的扩展. 语法 元素 ...

  10. GBase 8s V8.8 SQL 指南:教程-5.1.1

    5.1.1 聚集函数 聚集函数对一组查询返回一个值.聚集函数取用依赖于 SELECT 语句的 WHERE 子句返 回的一组行的值.没有 WHERE 子句时,聚集函数取用依赖于 FROM 子句组成的所有 ...

最新文章

  1. (41)缺页异常简介
  2. 数字后端——时序验证
  3. linux解锁文件.user.ini,Linux下解决网页服务器权限和.user.ini无法删除的问题
  4. java 创建进程_Linux下创建进程简介
  5. perl脚本中的特殊字符也与V字符串
  6. docker 安装 MySQL 8,并减少内存占用 记录
  7. 使用 matlab 求解多元非线性方程组
  8. 发现eclipse红叉,查看markers发现Target runtime Apache Tomcat 6.0 is not defined
  9. php遍历path树,php 递归遍历文件树代码_PHP教程
  10. windows注册表文件损坏了,导致windows无法启动,解决办法!
  11. python爬虫贴吧_Python爬虫——抓取贴吧帖子
  12. word插入页码问题解决办法
  13. go语言命令入门之env(操作环境信息)
  14. 计算机提示无法访问手机tf卡,电脑(手机)无法读取内存卡(存储卡)的解决方法大全...
  15. Flutter开发之——getX-路由管理(04)
  16. h5单页,微信浏览器唤醒APP
  17. qunee 开发清新、高效的拓扑图组件 http://www.qunee.com/
  18. 21天,在Github上获取 6300 star
  19. 浙江大学教授郑强的经典语录
  20. 2021年全球与中国小方坯连铸机行业市场规模及发展前景分析

热门文章

  1. 倪静(201550919)第一次作业
  2. ecshop后台getshell
  3. Groovy(二)groovy基础
  4. PSM价格敏感度模型
  5. 一、贴片电阻大小的识别与常用的原理图标注规范
  6. 微信公众号小白的进阶之路
  7. java 读书笔记_《java编程思想》读后感
  8. 为什么边缘概率密度是联合概率密度的积分_看懂蒙特卡洛积分(一) 概率分布变换与随机采样...
  9. 概率论(三)-多维随机变量及其分布:n维随机变量、概率分布函数F(x1,x2,..xn)、联合分布律、联合概率密度、边缘分布律、边缘概率密度、条件分布律、条件概率密度、β函数、Γ函数、max{X,Y}
  10. linux版本qq,QQLinux版下载-QQ for Linux下载v2.0.0 最新版-西西软件下载