首页 > 其他分享 >KingbaseES 自定义操作符使用示例

KingbaseES 自定义操作符使用示例

时间:2024-07-26 11:08:13浏览次数:13  
标签:1.1 自定义 示例 numeric boolean 操作符 KingbaseES id

本文详细介绍了KingbaseES中在兼容适配过程中,当遇到不支持的操作符,如何通过自定义方式解决兼容适配问题。

Kingbase自定义操作符语法和用例如下:

用例数据:

create table demo(id numeric(10,5));

insert into demo values(1.1);
insert into demo values(0);
insert into demo values(-1.1);

oracle中使用方式与kes中差异:

oracle数据库支持:

select id , id = true from demo;
ID ID=TRUE
1.1 TRUE
0 FALSE
-1.1 TRUE
select id from demo where id = true;
ID
1.1
-1.1
select id from demo where true = id; 
ID
1.1
-1.1

Kingbase数据库不支持:

test=# select id , id = true from demo;
ERROR:  操作符不存在: numeric = boolean
第1行select id , id = true from demo;

从用例可以看出,Kingbase中不支持numeric数据类型与boolean类型的数据比较。
oracle中0为false,非0数据为false。

一、Kingbase自定义操作符用例

报错:【操作符不存在: numeric = boolean】
说明不存在numeric和boolean数据类型的比较功能。

以numeric和boolean比较为例:

定义numeric_boolean(numeric, boolean)函数,参数numeric为操作符左侧数据类型;参数boolean为操作符右侧数据类型。

参照oracle数据库中两种类型的比较,对业务比较函数逻辑进行改写。

1.1 操作符比较函数

操作符比较函数1:(numeric与boolean比较):

CREATE OR REPLACE FUNCTION public.numeric_boolean(numeric, boolean)
 RETURNS boolean
 LANGUAGE sql
AS $function$select ($1 = 0.0) <> $2;$function$

操作符比较函数2:(boolean与numeric比较):

CREATE OR REPLACE FUNCTION public.boolean_numeric(boolean, numeric)
 RETURNS boolean
 LANGUAGE sql
AS $function$select ($2 = 0.0) <> $1;$function$

1.2 自定义操作符

自定义操作符定义中【以自定义操作符1为例】:

参数配置【leftarg = numeric】与numeric_boolean函数中左侧函数类型一致;

参数配置【rightarg = boolean】与numeric_boolean函数中右侧函数类型一致;

参数配置【procedure = numeric_boolea】为自定义操作符调用的numeric_boolean函数。

自定义操作符1:(numeric与boolean比较):

create operator = (
  leftarg = numeric,
  rightarg = boolean,
  procedure = numeric_boolean
);

自定义操作符2:(boolean与numeric比较):

create operator = (
  leftarg = boolean,
  rightarg = numeric,
  procedure = boolean_numeric
);

自定义操作符其他参数使用,请见【Kingbase自定义操作符语法】中语法说明。

二、Kingbase自定义操作符使用

test=# select id , id = true from demo;
  id  | ?column? 
------+----------
  1.1 | t
    0 | f
 -1.1 | t
(3 行记录)
test=# select id from demo where id = true;
  id  
------
  1.1
 -1.1
(2 行记录)

test=# select id from demo where true = id;  
  id  
------
  1.1
 -1.1
(2 行记录)

注意:在Kingbase中,(numeric=boolean)与(boolean=numeric)被识别为两个操作符,需要单独定义不同的操作符。

三、Kingbase自定义操作符语法

CREATE OPERATOR name (
    {FUNCTION|PROCEDURE} = function_name
    [, LEFTARG = left_type ] [, RIGHTARG = right_type ]
    [, COMMUTATOR = com_op ] [, NEGATOR = neg_op ]
    [, RESTRICT = res_proc ] [, JOIN = join_proc ]
    [, HASHES ] [, MERGES ]
)

语义:

name:
要定义的操作符的名称。允许使用的字符请见上文。名称可以被模式限定,例如CREATE OPERATOR myschema.+ (...)。如果没有被模式限定,该操作符将被创建在当前模式中。如果两个同一模式中的操作符在不同的数据类型上操作,它们可以具有相同的名称。这被称为重载。

function_name:
用来实现这个操作符的函数。

left_type:
这个操作符的左操作数(如果有)的数据类型。忽略这个选项可以表示一个左一元操作符。

right_type:
这个操作符的右操作数(如果有)的数据类型。忽略这个选项可以表示一个右一元操作符。

com_op:
这个操作符的交换子。

neg_op:
这个操作符的求反器。

res_proc:
用于这个操作符的限制选择度估计函数。

join_proc:
用于这个操作符的连接选择度估算函数。

HASHES:
表示这个操作符可以支持哈希连接。

MERGES:
表示这个操作符可以支持归并连接。

标签:1.1,自定义,示例,numeric,boolean,操作符,KingbaseES,id
From: https://www.cnblogs.com/kingbase/p/18280372

相关文章

  • KingbaseES 集群运维典型案例 03 --“双主” sys_rewind恢复机制
    案例说明:主库主机系统重启,触发failover切换,原主库系统启动后,数据库服务被启动,出现“双主”,使用“repmgrnoderejoin--force-rewind”恢复集群。通过本案例了解,集群“双主”产生的原因及解决方案,并熟悉sys_rewind在集群恢复中的应用。数据库版本:KingbaseESV8R6一、集群架构......
  • 如何将相对路径设置为解释器路径 xlwings 自定义加载项
    我使用xlwings制作了自定义加载项。我有一本字典,其中:phodnota.py、phodnota.xlam和Python311(带有python解释器和所有需要的库的字典)。问题是,当我尝试添加到解释器路径相对路径Python311\python.exe时,它​​不起作用。我不断收到错误。我找不到......
  • 前端Vue自定义支付密码输入框键盘与设置弹框组件的设计与实现
    摘要随着信息技术的不断发展,前端开发的复杂性日益加剧。传统的开发方式,即将整个系统构建为一个庞大的整体应用,往往会导致开发效率低下和维护成本高昂。任何微小的改动或新功能的增加都可能引发对整个应用逻辑的广泛影响,这种“牵一发而动全身”的现象在开发过程中屡见不鲜。为......
  • ​前端Vue自定义签到获取积分弹框组件设计与实现
    摘要随着前端技术的不断演进,开发的复杂性日益凸显。传统的整体式开发方式在面临功能迭代和修改时,常常牵一发而动全身,导致开发效率低下和维护成本高昂。组件化开发作为一种解决方案,通过实现模块的独立开发和维护,大大提高了开发效率和可维护性。本文将以Vue框架下的自定义签到获......
  • Vue前端数值转换为千分位格式并保留两位小数代码示例
    在Vue中,你可以使用JavaScript的内置方法来实现数值转换为千分位格式并保留两位小数。以下是一个简单的示例:vue<template><div><inputv-model="number"type="number"placeholder="输入一个数字"><p>转换后的结果:{{formattedNumber}}</p></div>&l......
  • python 协程 自定义互斥锁
    最近在用python的一款异步web框架sanic搭建web服务,遇到一个需要加特定锁的场景:同一用户并发处理订单时需要排队处理,但不同用户不需要排队。如果仅仅使用asyncwithasyncio.Lock()的话。会使所有请求都排队处理。1importasyncio2importdatetime34lock=asyncio.L......
  • 企业级开源自定义表单优点多吗?好用吗?
    当前,应用专业的低代码技术平台能实现降本、增效、提质的目的。什么样的服务商能提供低代码技术平台?可以了解流辰信息企业级开源自定义表单的主要优势特点。它操作起来更灵活、更可靠、维护也方便、可视化操作界面,是很多中大型企业实现流程化办公的理想表单。欢迎随时来了解企业级......
  • 实现一个自己的OpenFeign 远程调用验证协议--Springboot 自定义拦截器验证请求合法性-
    Springboot如何实现一个自定义的拦截器处理系统发出的请求以及接收到的请求(实现一个用于feign远程调用验证的简单协议)文章目录Springboot如何实现一个自定义的拦截器处理系统发出的请求以及接收到的请求(实现一个用于feign远程调用验证的简单协议)**实现Feign拦截器的意......
  • python 装饰器执行顺序的代码示例
    defdecoratorA(func):print(33)defwrapperA():print("EnteringA")print(func())print("ExitingA")print(44)returnwrapperAdefdecoratorB(func):print(11)defwrapperB():print("Ent......
  • 自定义IPython启动:打造个性化的交互式编程环境
    自定义IPython启动:打造个性化的交互式编程环境IPython,一个强大的交互式Python解释器,提供了丰富的定制选项,允许用户根据个人或团队的需求定制其行为和外观。设置自定义的启动命令是IPython定制功能的一部分,它可以让你在启动IPython时自动执行一系列操作,如导入模块、设置变量......