金仓数据库 KingbaseES 与 Oracle 的区别

金仓数据库Oracle兼容模式:IN、OUT、INOUT参数模式详解与实战 在数据库编程中,存储过程和函数的参数传递是核心概念,它定义了数据在调用者与被调用程序单元之间的流动方式。其基本原理是通过参数模式(IN、OUT、INOUT)来控制数据的输入、输出或双向传递,这是实现模块化、封装业务逻辑的关键技术。理解并正确使用这些模式,对于编写高效、可维护的数据库程序至关重要,尤其在涉及复杂业务逻辑和性能优化的场景下。本文将聚焦于国产金仓数据库(KingbaseES)的Oracle兼容模式,深入解析这三种参数模式的具体实现、细微差异、常见陷阱及性能优化技巧,例如如何利用NOCOPY提示符处 阅读详情
AI摘要

博客介绍了Oracle和PostgreSQL在基本数据类型上的差异,重点分析部分函数的使用。如coalesce函数返回首个非null值,extract函数用于日期特定部分提取,trunc和date_trunc用于时间截取,还介绍了两者在条件判断函数上的不同用法,最后列出常用有区别和无区别的函数。

基本数据类型差异

OraclePostgreSQL
Varchar2varchar
numbernumeric
datetimestamp/date/time
不支持boolean,可通过0/1代替支持boolean
nullnull

部分函数的使用简析:

(1)coalesce(COL1,COL2,COL3):返回参数中第一个非null字段值

例如:coalesce(COL1,0):如果COL1为null或‘’,则返回默认值0;否则返回COL1的值;

(2)extract(date):对日期特定部分提取(oracle和postgresql使用一致)

例如:extract(year from now());>>>2018    
            extract(month from now());>>>9
            extract(month from timestamp '2018-09-10 13:59:59');>>>9

(3)对时间截取trunc()和date_trunc()

>>oracle--trunc()的用法:
trunc(sysdate,'yyyy');//返回当前年的第一天>>>2018-01-01
trunc(sysdate, 'mm');//返回当前月的第一天>>>2018-09-01
trunc(sysdate, 'dd');//返回当前时间的年月日>>>2018-09-14
trunc(sysdate, 'hh');//返回当前小时>>>2018-09-14 13:30:50

>>postgreSQL--date_trunc()用法:                                                                                                                                 
date_trunc('year',now());//返回当前时间年的第一天>>>2018-01-01 00:00:00
date_trunc('month',now());//返回当前月的第一天>>2018-09-01 00:00:00
date_trunc('day',now()); //返回当前时间的年月日>>2018-09-14 00:00:00             
date_trunc('second',now()); //返回当前时间的年月日时分秒>>2018-09-14 13:30:50               

(3)条件判断

Oracle:
  Select DECODE (payments_info,'CR','Credit','DB','Debit', null) FROM dual;
PostgreSQL:
  Select CASE
      WHEN foo = 'CR'   THEN 'Credit'
      WHEN foo = 'DB'   THEN 'Debit'
      ELSE 'default'
  END
  FROM t2;

1. 常用函数

1.1. 有区别的函数

表 1.1.6  有区别的函数

序号

Oracle 函数名

KingbaseES 函数名

功能简要说明

数值函数

1

REMAINDER(n2,n1)

/

取 第一个参数除以 第二个参数的余 数,参数类型是 number 或者可以 转换为 number 的

2

NVL(n2,n1)

COALESCE(n2,n1)

当 n2 为 NaN 时,函数返回 n1 当 n2 不为 NaN 时, 函数返回 n2,参 数类型是浮点数

3

/

cbrt(dp)

立方根函数

4

/

degrees(dp)

把 弧度转换为角度

5

/

radians(dp)

把 角度转换为弧度

6

/

div(y numeric,x numeric)

y/x 的整数商

7

/

pi()

常数值

3.14159265358979

8

/

scale(numeric)

返回参数的精度 ,小数点后位数

9decode()

case...when...then

条件判断

字符函数

1

CHR(int,[USING NCHAR_CS])

chr(int)

返回 int 类型参 数指定的值的字 符,KingbaseES 不允许为 0,Oracle 可以输入 0

2

NCHR(number)

/

返回 number 类型值的 国际字符,Kingb aseES 不支持超出 字符范围的数值

3

REGEXP_REPLACE (source_char,pattern, replace_string,position, occurrence,match_param)

regexp_replace(string text,pattern text, replacement text [, flags])

替换 匹配。Oracle 与 KingbaseES 使用 方式部分不同, Oracle 中,position 代表从源第几个字符开始 occurrence 代表第几次替换。 KingbaseES 没有这个参数

4

REGEXP_COUNT(source_char pattern[,position [,match_param]])

regexp_count(source_char,pattern [,position, [,match_param]])

返回 匹配字符串数量。 Oracle 与 KingbaseES 的某些数据类型不同 导致结果不同,例如 time 类型。 Oracle 与 KingbaseES 的正则中 match_param 的意义有部分不同导致结 果不同,可参考 正则表达式元语法 。

5

REGEXP_INSTR(source_char, pattern [,position[,occurrence [,return_option [,match_param [,subexpr]]]]])

regexp_instr(source_char,pattern [,position [,occurrence [,return_option [,match_param [,subexpr]]]]])

返回字 符串的起始位置,或者结束位置。 Oracle 与 KingbaseES 的某些数据类型不同 导致结果不同,例如 time 类型。 Oracle 与 KingbaseES 的正则中 match_param 的意义有部分不同导致结 果不同,可参考 正则表达式元语法 。

6

/

strpos(string,substring)

position(substring in string)

返回指定字符串位置

7

/

convert(expr1 text,[,expr2 text],expr3 text)

把字符串 转换为 expr3 中声明的编码

8

NLS_INITCAP(char,[NLS_SORT = sort])

INITCAP(string)

将每一个词 的第一个字母转 换为大写形式并 把剩下的字母转 换为小写形式。

9

NLS_LOWER(char,nlsparam)

lower(string)

将字符串 转换为小写形式

10

CONCAT(char1,char2)

concat(str "any" [, str "any" [, ...]])

串接所有参数的 文本表示。NULL 参数被忽略。 Oracle :支持 2 个参数。 KingbaseES :支持多个参数

11

/

regexp_matches(string text, pattern text[,flags text])

返回对 string 匹配一个 POSIX 正则表达式 得到的所有子串

日期类函数

1

CURRENT_TIMESTAMP (precision)

CURRENT_TIMESTAMP

返 回当前日期时间 区别是精度不同

2

/

age(timestamp,timestamp)

age(timestamp)

减去参数,生成一个使用年、月(而不是只用日)的 "符号化" 的结果

3

/

clock_timestamp()

返回 当前日期和时间

4

/

date_part(text,timestamp)

date_part(text,interval)

返回 日期时间的子域

5

TRUNC(date,fmt)

date_trunc(text,timestamp)

date_trunc(text,interval)

返回截断到参数指定的日期时间

6

TO_DSINTERVAL(sql_format)

make_interval(years int DEFAULT 0, months int DEFAULT 0, weeks int DEFAULT 0, days intDE FAULT 0, hours int DEFAULT 0, mins int DEFAULT 0, secs double precision DEFAULT 0.0)

构造一个 interval,输入参数一个是字符串,一 个是数字

7

/

now()

返回 当前日期和时间

比较函数

1

GREATEST(expr,expr,expr,...)

LEAST(expr,expr,expr,...)

GREATEST(value[, ...])

LEAST(value [,...])

选取最大或者最小的数值

oracle:只要有一个参数是 null,则结果返回 null

KingbaseES:全部参数是 null 才返回 null

序列函数

1

/

currval(regclass)

返回最近一 次用 nextval 获取 的指定序列的值

2

/

nextval(regclass)

递增 序列并返回新值

3

/

setval(regclass,bigint)

setval(regclass,bigint,boolean)

设置序列的当前值

4

/

lastval()

返回最近一 次用 nextval 获取 的任何序列的值

大对象函数

1

/

clob_import(string,string)

将指定的文件以 clob 大对象的形 式导入数据库。

2

/

clob_export(clob,string,string)

将 clob 大对象的内容导 出到磁盘文件。

3

/

blob_import(string,string)

将指定的文件以 blob 大对象的形 式导入数据库。

4

/

blob_export(blob,string,string)

将 blob 大对象的内容导 出到磁盘文件。

Environment 和 Identifier 函数

1

/

version()

返回当前版本号

分析和聚集函数

1

COLLECT([DISTINCT UNIQUE] column [ORDER BY expr])

array_agg(expression)

形式上类似: KingbaseES 返回 参数类型的数组 Oracle 返回参 数类型的嵌套表

2

CORR_KCORR_S(expr1,expr2,

[COEFFICIENT ONE_SIDED_SIG ONE_SIDED_SIG_POS

ONE_SIDED_SIG_NEG TWO_SIDED_SIG])

/

相关率

3

LISTAGG(measure_expr, delimiter) WITHIN GROUP(order_by_clause)

string_agg(expression,delimiter)

输入 值连接成一个串 ,用定界符分隔

4

MEDIAN(expr)

/

返回中间值

5

STATS_BINOMIAL_TEST (expr1, expr2, p)

/

统 计二项测试是一 个精确概 率测试用于二分 变量,那里只有两 个可能值存在。 它测试一个样品 之间的差异比例 和给定的比例

6

STATS_CROSSTAB(expr1,expr2)

/

用于分析两个变量

7

STATS_F_TEST(expr1,expr2)

/

测试两个方差是否有明显的不同

8

STATS_KS_TEST(expr1,expr2)

/

STATS_KS_TEST 是柯尔莫哥洛 夫斯米尔诺夫函 数,它比较 expr1 和 expr2,判断他们是来自 同一个总体还是来自具有相同分布的总体。

9

STATS_MODE(expr)

/

将 expr 传入的一组值作为分析对象, 返回其中出现频率最高的值。

10

STATS_MW_TEST(expr1,expr2)

/

通过曼惠特尼测试比较两个独立样本,以检验 两个总体具有相同分布函数的零假设 与两个不同分布函数的备择假设

11

STATS_ONE_WAY_ANOVA (expr1, expr2)

/

单向方差分析函 数 (统计一维方差 分析) 测试差异在 意味着 (为团体或 变量), 通过比较 两种统计学意义 不同的估计方差

12

STATS_T_TEST_ONE(expr1)

/

单样本检验

13

STATS_T_TEST_PAIRED (expr1, expr2)

/

双样本匹配检验

14

STATS_T_TEST_INDEP (expr1,expr2)

/

具有相同方差的两个独立组检验

JSON 函数

1

/

to_json(anyelement)

to_jsonb(anyelement)

返回为 json 或者 jsonb

2

/

array_to_json(anyarray [,pretty_bool])

把数组作为一个 JSON 数组返回

3

/

row_to_json(record [,pretty_bool])

把行作为一个 JSON 对象返回

4

/

json_build_array(VARIADIC "any")

jsonb_build_array(VARIADIC "any")

从一个可变参数列表构造一个可能包含异质类型的 JSON 数组。

5

/

json_build_object(VARIADIC "any")

jsonb_build_object(VARIADIC "any")

从一个可变参数列表构造一个 JSON 对象

6

/

json_object(text[])

jsonb_object(text[])

从一个文本数组构造一个 JSON 对象

7

/

json_array_length(json)

jsonb_array_length(jsonb)

返回最外层 JSON 数组中的元素数量

8

/

json_each(json)

jsonb_each(jsonb)

json_each_text(json)

jsonb_each_text(jsonb)

扩展最外层的 JSON 对象成为一组键 / 值对

9

/

json_extract_path( from_json json,VARIADIC path_elems text[])

jsonb_extract_path( from_json jsonb,VARIADIC path_elems text[])

返回 path_elems 指向的 JSON 值(等效于 #> 操作符)

10

/

json_extract_path_text( from_json json, VARIADIC path_elems text[])

jsonb_extract_path_text( from_json jsonb, VARIADIC path_elems text[])

text 以文本返回由 path_elems 指向的 JSON 值(等效于 #>> 操作符)

11

/

json_object_keys(json)

jsonb_object_keys(jsonb)

返回最外层 JSON 对象中的键集合

12

/

json_populate_record(base anyelement, from_json json)

jsonb_populate_record(base anyelement, from_json jsonb)

扩展 from_json 中的对象成一个行,它的 列匹配由 base 定义的记录类型

13

/

json_populate_recordset (base anyelement, from_json json)

jsonb_populate_recordset (base anyelement, from_json jsonb)

扩展 from_json 中最外的对象数组为一个集合, 该集合的列匹配由 base 定义的记录类型

14

/

json_array_elements(json)

jsonb_array_elements(jsonb)

把一个 JSON 数组扩展成一个 JSON 值的集合

15

/

json_array_elements_text(json)

jsonb_array_elements_text (jsonb)

把一个 JSON 数组扩展成一个 text 值集合

16

/

json_typeof(json)

jsonb_typeof(jsonb)

把最外层的 JSON 值的类型作为一个文本字符

串返回

17

/

json_to_record(json)

jsonb_to_record(jsonb)

从一个 JSON 对象构建一个任意的记录

18

/

json_to_recordset(json)

jsonb_to_recordset(jsonb)

从一个 JSON 对象数组构建一个任意的记录集合

19

/

json_strip_nulls(from_json json)

jsonb_strip_nulls(from_json jsonb)

返回具有空值对象域的 from_json。其它空值不变

20

/

jsonb_set(target jsonb,

path text[],new_value jsonb,

[create_missing boolean])

若 create_missing 为真(缺省是 true) 并且通过 path 指定部分不存在,那 么返回 target,它具有 path 指定部分, new_value 替换部分, 或者 new_value 添加部分

21

/

jsonb_insert(target jsonb, path text[], new_value jsonb,[insert_after boolean])

返回被插入了 new_value 对应的 target

22

/

jsonb_pretty(from_json jsonb)

作为缩进 JSON 文本返回 from_json

1.2. 无区别的函数

表 1.2.17  无区别的函数

序号

Oracle 函数名

KingbaseES 函数名

功能简要说明

数值函数

1

ABS(n)

abs(x)

绝对值

2

ACOS(n)

acos(x) acosd(x)

反余弦

3

ASIN(n)

asin(x) asind(x)

反正弦

4

ATAN(n)

atan(x) atand(x)

反正切

5

ATAN2(n1,n2)

atan2(y, x)

y/x 反正切

6

TAN(n)

tan(x) tand(x)

正切

7

EXP

exp(dp or numeric)

指数

8

FLOOR

floor(dp or numeric)

不大于 参数的最大整数 mod (y, x)

9

MOD

mod(y, x)

y/x 的余数

10

SIGN

sign(dp or numeric)

参数的符号(-1,0,+1)

11

WIDTH_BUCKET

width_bucket(dp or numeric, dp or numeric, dp or numeric, int

返回一个桶

12

BITAND (expr1,expr2)

bitand(expr1,expr2 )

按位与 ,参数类型都是 number 或者可以 转换为 number 的

13

LN(n)

ln(dp or numeric)

自然对数

14

LOG(n2,n1)

log(dp or numeric)

log(b numeric,x numeric)

KingbaseES 中单个参数是以 10 为底的对数两个参数的形式 KingbaseES 和 Oracle 一致

15

POWER(n2,n1)

power(a dp,bdp)

power(a numeric, b numeric)

返回 a 的 b 次幂

16

ROUND (n[, integer])

round(dp or numeric)

round(v numeric, s int)

圆整为最接近的整数

圆整为 s 位小数数字

17

SQRT ( n )

sqrt(dp or numeric)

平方根

18

TRUNC ( n1[,n2])

trunc(dp or numeric)

trunc(v numeric, s int)

截断(向零靠近)

截断为 s 位 小数位置的数字

19

CEIL ( n )

ceil(dp or numeric)

ceiling(dp or numeric)

不小于 参数的最小整数

20

BIN_TO_NUM(expr,...)

bin_to_num(expr ,...)

将二进制数转换为十进制。将任何数据类型或可以隐式转 换为数据类型的非数据类型作为参数,每个 expr 必须为 0 或 1。

字符函数

1

SUBSTR

substring (string [from int] [for int])

提取子串

2

RPAD

rpad(string text,length int [,fill text])

用字符串 expr3 (第三个参数) 将字符串 expr1 (第一个参数) 从右边填充到指定的长度 expr2 ( 第二个参数),在 第三个参数缺省 时,填充空格。

3

REPLACE(char,search_string, replacement_string)

replace(string text, from text, to text)

将 string 中 出现的所有子串 from 替换为子串 to

4

REGEXP_SUBSTR( source_char, pattern, position, occurrence, match_param ,subexpr)

regexp_substr (string text, pattern text [, position int [, occurrence int [, flags text [, num int]]]])

在 string 搜索一个 POSIX 正则表达式字 符串,返回的搜 索到的子字符串

5

TRANSLATE(expr,from_string, to_string)

translate (string text, from text, to text)

string 中任何 匹配 from 集合中 一个字符的字符 会被替换成 to 集 合中的相应字符

6

INSTRB(string, substring, position, occurrence)

instrb(expr1 text, expr2 text, [expr3 int [,expr4 int]])

在父字符串 expr1 中的第 expr3 个位 置(从 1 开始)以 字符为单位开始 查找第 expr4 次出 现的子字符串的 位置,0 表示不包 含子字符串 expr2 。如果 expr3 为负 ,则从 expr1 的倒 数第 expr3 个位置 开始反向查找, 位置依然是从字 符串开头算起。

7

LENGTH

length(string)

length(string bytea,encoding name)

返回字符串长度

8

reverse(str)

reverse(str)

返回 反转的字符串。

9

UPPER

upper(string)

将字符串 转换成大写形式

10

LPAD(expr1 [,n,expr2])

lpad(string text,length int[,fill text])

将 string 通过前置字符 fill (默认是一个 空格)填充到长 度 length。如果 string 已经长于 length ,则它被( 从右边)截断。

11

LTRIM(char,set)

ltrim(string text[, characters text])

从 string 的开头删除最 长的只包含 characters (默认是一 个空格)的字串 。在兼容 ORACLE 的时候(ora_func_style 为 true) ,characters 只 能是一个字符。 ora_func_style 为 false 时可 以为多个字符。

12

RTRIM(char,set)

rtrim(string text[, characters text])

从 string 的结尾 删除最长的只包 含 characters( 默认是一个空格 )的字串。在兼 容 ORACLE 的时候 (ora_func_style 为 true) ,characters 只能是一个字符。 ora_func_style 为 false 时可 以为多个字符。

13

TRIM ([LEADING |TRAILING| BOTH[ trim_character] from] [trim_character from] trim_source )

trim([leading |trailing| both] [characters from] string)

从 string 的开头 / 结尾 / 两端删除 最长的只包含 characters (默认是 一个空格)的串

14

ASCII(char)

ascii(string)

返回参数第一个 字符的 ASCII 代码

15

LENGTHB(char)

lengthb(string)

返回字符串的字节数

16

SUBSTRB( char,position[, sub string_length])

substrb(expr1 text,[from] expr2 int[, [for] expr3 int])

取 子字符串,在父 字符串 expr1 (第 一个参数) 中的第 expr2 (第二个参 数) 个字节位置开 始取 expr3 (第三 个参数) 个字节, 如果第三个参 数缺省,则从第 expr2 (第二个参数 ) 个位置开始取右 面部分的全部, 如果第二个参数 为负,则是从父 字符串的尾部截 取 expr3 个字节。

日期时间

1

EXTRACT (field from expr)

extract (fieldfrom timestamp) extract(field from interval)

从当前日期时 间抽取时间字段

2

TO_CHAR (datetime,fmt)

to_char (timestamp, text)

日期 时间转换为字符

3

TO_TIMESTAMP (char, fmt)

to_timestamp (text, text)

返回日期时间

4

ADD_MONTHS ( date , integer )

ADD_MONTHS (expr1 日期 / 时间类型,expr2 INT)

返回 expr1 加上 expr2 个 月的日期时间值

5

LAST_DAY ( date )

LAST_DAY (expr1 日期 / 时间类型)

返回日期中的 月份的最后一天

6

MONTHS_BETWEEN ( date1 , date2 )

MONTHS_BETWEEN ( date1 , date2 )

返 回日期的月份差

7

NEXT_DAY (date , char )

NEXT_DAY (expr1 日期 / 时间类型,expr2 TEXT)

返回 expr 1 日期后的第一个 由参数 expr2 命名 的日期,参数 expr2 的值必须在周 一到周日范围中

8

SYSDATE

SYSDATE

返 回当前系统日期

9

SYSTIMESTAMP

SYSTIMESTAMP

返 回当前系统时间

10

TO_DATE(char, fmt)

to_date(text, text)

返回日期值 输入 参数一个是字符 串,一个是数字

11

TO_TIMESTAMP (char, fmt)

make_time(hour int, min int, sec double precision)

make_timestamp (year int, month int, day int, hour int, min int, sec double precision)

make_timestamptz (year int, month int, day int, hour int, min int, sec double precision, [ timezone text ])

to_timestamp (text, text)

返回日期时间值 输入 参数一个是字符 串,一个是数字

12

OVERLAPS

(start1,end1) OVERLAPS (start2,end2)

在两个时间域( 用它们的端点定 义)重叠的时候 得到真,当它们 不重叠时得到假

13

CURRENT_DATE

current_date

当前日期

大对象函数

1

EMPTY_BLOB()

EMPTY_CLOB()

empty_blob()

empty_clob()

返回空大对象

Decoding 函数

1

DECODE(expr,search,result, default)

decode(expr ,search, result, default)

将 expr 和 search 值一 个一个比较。如 果相等则返回 result 如果不等返回 default 值。

NULL 相关函数

1

COALESCE ( expr,...)

COALESCE(value [, ...])

COALE SCE 函数返回它的 第一个非空参数 的值。当且仅当 所有参数都为空 时才会返回空。

2

LNNVL(condition)

LNNVL(condition)

用于 where 条件中,condition 为真时返回假,假时返回真

3

NULLIF ( expr1 , expr2 )

NULLIF(value1, value2)

KingbaseES :value1 可以为 null oracle:value1 不能为 null

4

NVL(expr1, expr2)

NVL(expr1, expr2)

当 expr1 为 NULL 时,用 expr2 代 替本表达式的值

5

NVL2 ( expr1 , expr2 , expr3 )

NVL2 ( expr1 , expr2 , expr3 )

当 expr1 为 NULL 时,返回值为 expr3;否则为 expr2

Environment 和 Identifier 函数

1

sys_guid()

sys_guid()

返 回一个全局唯一 的标识符

2

uid

uid

返回目前执 行环境下的用户 ID

3

user

User /current_user

返回当前用户

分析和聚集函数

1

COUNT (* DISTINCT ALL expr )

count

非空 的输入行的数目

2

COVAR_POP ( expr1 , expr2 ) OVER (a nalytic_clause)

covar_pop(Y, X)

总体协方差

3

COVAR_SAMP( expr1 , expr2 ) OVER ( analytic_clause )

covar_samp(Y, X)

样本协方差

4

CUME_DIST( expr ,) WITHIN GROUP (ORDER BY expr)

cume_dist(args) WITHIN GROUP (ORDER BY sorted_args)

当 前行的相对排名

5

DENSE_RANK(expr,) WITHIN GROUP(ORDER BY expr)

dense_rank(args) WITHIN GROUP (ORDER BY sorted_args)

不带间 隙的当前行排名

6

MAX (DISTINCT ALL expr )

max(expression)

所有输入值中 expression 的最大值

7

MIN (DISTINCT ALL expr )

min(expression)

所有输入值中 expression 的最小值

8

PERCENT_RANK ( expr ,) WITHIN GROUP( ORDER BY expr)

percent_rank(args) WITHIN GROUP (ORDER BY sorted_args)

假想行的相 对排名,范围从 0 到 1

9

PERCENTILE_CONT ( expr ) WITHIN GROUP ( ORDER BY expr)

percentile_cont (fractions) WITHIN GROUP (ORDER BY sort_expression)

连续百分率

10

PERCENTILE_DISC ( expr ) WITHIN GROUP ( ORDER BY expr)

percentile_disc(fraction) WITHIN GROUP (ORDER BY sort_expression)

离散百分率

11

RANK(expr,) WITHIN GROUP ( ORDER BY expr)

rank(args) WITHIN GROUP (ORDER BY sorted_args)

假想 行的排名,为重 复的行留下间隔

12

REGR_SLOPE

regr_slope(Y, X)

由(X, Y)对决定的 最小二乘拟合的 线性方程的斜率

13

REGR_INTERCEPT

regr_intercept (Y, X)

由(X, Y)对决 定的最小二乘拟 合的线性方程的 y 截距

14

REGR_COUNT

regr_count(Y, X)

两个 表达式都不为空 的输入行的数目

15

STDDEV (DISTINC TALL expr )

stddev (expression)

输入值 的样本标准偏差

16

STDDEV_POP ( expr )

stddev_pop (expression)

输入值 的总体标准偏差

17

STDDEV_SAMP ( expr )

stddev_samp (expression)

输入值 的样本标准偏差

18

SUM (DISTINCT ALL expr )

sum(expression)

所有输入的 expression 的和

19

VAR_POP ( expr )

var_pop (expression)

输 入值的总体方差

20

FIRST

first_value (value any)

返回 在窗口帧中第一 行上计算的 value

21

FIRST_VALUE *

first_value (value any)

返回 在窗口帧中第一 行上计算的 value

22

LAG

lag(value anyelement [, offset integer [, default anyelement ]])

返回 value, 它在分区 内当前行的之前 offset 个位置的行 上计算;如果没 有这样的行,返 回 default 替代。 (作为 value 必 须是相同类型)。 offse t 和 default 都 是根据当前行计 算的结果。如果 忽略它们,则 offset 默认是 1,default 默认是空值

23

LAST

last_value (value any)

返回在 窗口帧中最后一 行上计算的 value

24

LAST_VALUE *

last_value (value any)

返回在 窗口帧中最后一 行上计算的 value

25

LEAD

lead(value anyelement [, offset integer [, default anyelement ]])

返回 value,它在分区 内当前行的之后 offset 个位置的行 上计算;如果没 有这样的行,返 回 default 替代。 (作为 value 必须 是相同类型)。offset 和 default 都 是根据当前行计 算的结果。如果 忽略它们,则 offset 默认是 1,default 默认是空值

26

NTH_VALUE *

nth_value(value any, nth integer)

返回在窗口帧 中第 nth 行(行从 1 计数)上计算的 value;没有这样 的行则返回空值

27

NTILE

ntile (num_buckets integer)

从 1 到参数 值的整数范围, 尽可能等分分区

28

ROW_NUMBER

row_number()

当前行在其分区 中的行号,从 1 计

29

CORR ( expr1 , expr2 )[OVER ( analytic_clause )]

corr(Y,X)[OVER(analytic_clause)]

相关系数

30

AVG (DISTINCT ALL expr ) OVER ( analytic_clause )

avg(expression)OVER ( analytic_clause )

所 有输入值的平均 值(算术平均)

XML 函数

1

XMLCOMMENT(value_expr)

xmlcomment(text)

创建了一个 XML 值

2

XMLCONCAT (XMLType_instance)

xmlconcat(xml[, ...])

由单个 XML 值组 成的列表串接成 一个单独的值, 这个值包含一个 XML 内容片断

3

XMLELEMENT

xmlelement(name name [, xmla ttributes(value [AS attname] [, ... ])] [, content, ...])

表达式 xmlelement 使用 给定名称、属性 和内容产生一个 XML 元素。

4

XMLFOR EST(value_expr)

xmlforest (content [AS name] [, ...])

表达 式 xmlforest 使用 给定名称和内容 产生一个元素的 XML 森林(序列)。

5

XMLPI

xmlpi(name target [, content])

表达 式 xmlpi 创建一个 XML 处 理指令。如果存 在内容,内容不 能包含字符序列

6

XMLROOT

xmlroot(xml, version text | no value [, standalone yes | no | no value])

表达式 xmlroot 修改一个 XML 值 的根结点的属性

7

XMLAGG

xmlagg(xml)

函 数 xmlagg 是一个 聚集函数。它将 聚集函数调用的 输入值串接起来

8

APPENDCHILDXML

appendchildxml(xml, XPath_string text, value_expr text[, nam espace_string])

将用 户提供的值作为 XPath 表达式指示 的节点的子节点 附加到目标 XML 上

9

UPDATEXML

updatexml(xml, XPath_string text, value_expr text[, nam espace_string])

将 XML 实例 、XPath 及新的 xml 更新值对作为参 数,并返回 XML 具 有更新值的实例

层次查询函数

1

SYS_CONNECT_BY_PATH (column,char)

SYS_CONNECT_BY_PATH (Expression,char)

返回从根元组到 当前元组的路径 ,这个路径是由 c har 字符分隔的在 各个元组上计算 的 Expression 的 值连接构成的。

KingbaseESV6.1与ORACLE对比.doc KingbaseESV6.1与ORACLE对比,版本较旧,但是有用,新版只是做了一些改进,需要的同学自行下载 立即下载

相关推荐

牛顿法vs高斯牛顿法vs LM算法:三行代码说清核心区别(附性能对比表格)

本文通过对比牛顿法、高斯牛顿法和LM算法的核心迭代代码,揭示了三者在非线性最小二乘优化中的本质区别。LM算法通过引入阻尼因子,在高斯牛顿法的快速收敛与梯度下降的稳定性之间取得平衡,成为工程实践中鲁棒性最强的首选。文章还提供了清晰的性能对比表格,帮助开发者根据初始估计和问题性质快速选择合适算法。

weixin_29062255的博客 419

Oracle mysql 达梦 大金仓 hive 区别

Oracle数据库:MySQL数据库:达梦数据库:大金仓数据库:Hive数据库:相同点:不同点:sql区别:

m0_60106965的博客 3642

5060TI显卡深度学习环境搭建:CUDA12.8与CUDNN9.8.0的完美搭配

本文详细介绍了在Win10系统下为5060TI显卡搭建深度学习环境的最佳实践,重点配置CUDA12.8与CUDNN9.8.0的完美组合。通过优化OpenCV编译选项和YOLOv5环境设置,显著提升模型训练和推理效率,帮助开发者充分发挥5060TI显卡的性能潜力。

weixin_29065791的博客 489

金仓数据库KingbaseES与Oracle大对象类型之间的区别

金仓数据库KingbaseES与Oracle大对象类型之间的区别

arthemis_14的博客 1840

西门子S7-1200与S7-200SMART的PROFINET通讯实战:从GSD文件生成到数据监控

本文详细解析了西门子S7-1200与S7-200SMART之间实现PROFINET通讯的完整实战流程。核心内容包括将S7-200SMART配置为智能IO设备、生成并安装GSD文件、在TIA Portal中进行网络组态与地址映射,最终实现双向数据交换与监控。该方案为整合新旧设备、构建灵活高效的工业自动化系统提供了可靠路径。

weixin_29271263的博客 246

CUPED (Controlled-experiment using Pre-Experiment Data) 论文学习笔记

CUPED是一种用于提升A/B测试灵敏度的方差缩减技术。它通过利用实验前用户行为数据(协变量X)构建调整后的指标Y_cuped=Y-θ(X-E[X]),其中θ=Cov(Y,X)/Var(X)。这种方法能在保持处理效应估计无偏的前提下,将方差降低1-ρ²倍(ρ为前后指标相关性)。CUPED的核心优势在于:不改变平均处理效应的估计,但能显著提升统计功效,使得实验更容易检测到微小但真实的效应,同时减少所需样本量或实验周期。该技术特别适用于用户异质性大、指标方差高的场景。

pursuit的博客 2148

KingbaseES 函数稳定性与SQL性能

背景:客户现场的一次艰苦的调优过程(https://www.cnblogs.com/kingbase/p/16015834.html),让我觉得非常有必要让数据库用户了解函数的不同稳定性属性,及其对于SQL性能可能带来的影响。很多DBA、开发人员根本就不在意,或者根本就没意识到函数稳定性对于性能的影响,这就导致出现性能问题时没有头绪。以下的例子都是实际客户现场问题的提炼,为了让用户有直观的了解。...

lyu1026的博客 1074

XR Interaction Toolkit实战:为HTC Vive Cosmos打造抓取、投掷与UI交互(Unity 2023教程)

本文详细介绍了如何使用Unity 2023和XR Interaction Toolkit为HTC Vive Cosmos开发抓取、投掷与UI交互系统。通过实战案例'VR投掷训练室',从基础配置到高级功能实现,涵盖物理抓取、精准投掷机制和VR UI交互设计,帮助开发者提升VR交互开发技能。

weixin_30562507的博客 255

从多表连接视图对比人大金仓和Oracle

KING BASE信息时代,数据是驱动业务决策和创新的核心资源。然而,随着数据量的不断增加,有效地处理和整合数据的过程变得愈发复杂。这时,多表连接视图悄然走进数据库世界,不仅能够将多个表中的数据整合在一起,更加便捷,同时还以其可更新的特性,为数据管理带来了全新的可能性。目前,多表连接视图功能在主流数据库中都被支持,但各数据库的功能表现有所不同(如下图)。KingbaseES支持的连接视图功能项和O...

Kingbase_的博客 659

YOLOv8 ultralytics使用笔记----labelme标记数据,训练模型、追踪目标。

Ultralytics是一个Python库,它是为执行高级计算机视觉任务而创建的,如对象检测、实例分割、图像分类等。Ultralytics为YOLO模型发布了一个全新的存储库,它被构建为用于机器视觉统一框架。这里先利用,并激活。

qq_48050838的博客 1万+

AUTOSAR OS Counter讲解

Counter(计数器)以tick为单位记录操作系统中发生了多少“事情”。tick(滴答)是一个抽象的单位。时间,例如毫秒,微妙,分钟等,然后计数器计算过去了多少时间旋转,例如以度或分钟为单位,计数器计算物体旋转了多少按钮按下,计数器计算按钮按下多少次错误,计数器计算错误发生的频次中断(有时是任务)用于驱动一个计数器。该驱动程序负责进行正确的OS API调用来滴答计数器,或者告诉OS计数器已经滴答到一个所需的值。

酒无忧的博客 1073

人大金仓 金仓数据库KingbaseES ROWID

KES 的 ROWID 或者说是类比于ROWID 的相关功能实际上都实际存储在数据库中,而Oracle 的ROWID 实际上是伪列,没有实际的存储,它的值是通过行在整个数据库系统中的偏移推断出来的。KES 目前系统的存储框架不能保证行在数据库中地址的唯一,但其插入的地址是唯一的,当该元组被insert 后我们可以将其插入的位置用某种唯一确定的编码或id 进行存储,在后面的update、vacuum 过程中此值不会发生变化。ROWID 为KES 内置类型,用户可以通过其创建属于ROWID 类型的列。

arthemis_14的博客 1537

【FDTD】仿真目录(共计 16 篇)

对于完美吸收型边界条件,有时候我们需要设置将仿真结构穿过边界条件区域,具体原因可以阅读下文。在进行 S 参数扫描时,当考虑到材料的色散特性时,我们可以如下文一样选择计算群延迟。仿真,我们需要构建仿真结构与仿真区域,对于它们的尺寸,应该遵循下文进行设定。中存在多种不同的网格类型,具体可以参考下文,这部分内容仅作了解即可。尺寸的设置问题,对于 mesh 的最小尺寸,可以参考下文。的边界条件设置也十分重要,下文中我们对边界条件进行总结。仿真中我们可以设定参与仿真的模式数量,可以参考下文。尺寸的实例,详见下文。

u011699626的博客 504

金仓数据库KingbaseES 迁移工具—PL/SQL中Oracle和KingbaseES 的对比

关键字: KingbaseES、PL/SQL、存储过程、函数 一、PL/SQL语言兼容特性 在 PL/SQL 语言方面,KingbaseES 提供了大量的Oracle 兼容特性。这些特性使得大多数的 Oracle 数据库对象和 SQL 语句移植到 KingbaseES 中无需任何转换。 本文主要介绍 KingbaseES 原生支持的 Oracle 兼容特性,并提供了必要的示例说明。 二、PL/SQL语言兼容案例 2.1 记录类型 为降低 Oracle 移植难度,KingbaseES 在自身的

arthemis_14的博客 1324

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

人大金仓数据库KingbaseES中分区表的使用

1、介绍了分区的基础理论知识。2、介绍了在mysql、oracle、pgsql模式下分区的基本操作。

arthemis_14的博客 1203

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Oracle迁移不用愁,金仓数据库性能优化秘籍大放送

安装的时候,我发现金仓数据库的安装向导做得挺友好的,一步步引导,对于有数据库安装经验的人来说,上手并不难。不过,这里我想吐槽一下,安装过程中有些提示信息还是不够清晰,比如在选择安装路径的时候,没有明确提示哪些路径是不建议选择的,新手可能会踩坑。从参考资料中,我了解到金仓数据库在Oracle模式下,与原生Oracle数据库的内置函数有很多兼容的地方,比如数字函数中的ABS、ACOS等,字符串函数中的CONCAT、LOWER等。不过,和Oracle的JSON函数相比,金仓数据库的JSON函数还是存在一些差异。

程序边界 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

人大金仓数据库KingbaseES 兼容Oracle包dbms_xmlgen的使用(二)

KingbaseES、xml、dbms_xmlgen、行标签、根标签、人大金仓、KingbaseES、

arthemis_14的博客 1278

金仓数据库.NET驱动Oracle-KingbaseES应用迁移方案

金仓数据库对Oracle有较好的兼容度,金仓对外提供的.NET驱动从2.0到8.0均兼容Oracle数据库,以下对Oracle .NET驱动简称ODP.NET,对KES .NET驱动简称为ADO.NET。金仓数据库的获取方式如下所示:(1)直接引用dll文件,在金仓官网下载或者官网进行咨询,获取最新的Kdbndp.dll文件,然后在项目中引用dll文件。

arthemis_14的博客 1132

Oracle到KingbaseES数据库迁移实战指南

数据库迁移是系统架构演进中的关键技术环节,涉及数据一致性、性能优化和业务连续性保障。在国产化替代趋势下,Oracle到KingbaseES的迁移成为热点场景。KingbaseES作为国产数据库代表,通过兼容性评估工具可识别85%的Oracle语法直接兼容,剩余部分需针对性调整。迁移过程中,存储过程重写和性能调优是两大技术重点,包括索引策略调整、SQL语句改写和参数配置优化。金融等行业系统迁移时,还需特别关注字符集转换和日期时间处理等细节问题。采用分阶段实施策略,结合自动化验证脚本,可有效控制迁移风险。

weixin_33946605的博客 431

金仓数据库KingbaseES 跨库访问

摘要:KingbaseES数据库在不同模式下实现跨库访问的方法:1.Oracle模式下使用kdb_database_link插件,需配置kingbase.conf并创建数据库链接;2.MySQL模式下通过mysql_fdw扩展实现,需创建外部服务器、用户映射和外部表。两种方法均需先安装相应扩展,Oracle模式支持异构数据库访问,MySQL模式仅支持通过外部表方式查询远程数据。具体操作包括配置连接参数、创建映射关系等步骤,文中提供了完整的SQL示例。

qq_21608393的博客 777

oracle和金仓区别,个人睬坑

oracle和金仓

美丽的博客 1076

金仓数据库KingbaseES Currtid 函数与性能问题

对于Oracle ,一条tuple 的 rowid正常是不会变化的(引发row movement的操作除外,如:跨分区迁移update,表收缩),因此,应用设计上可以方便的使用rowid,加快访问速度。对于KingbaseES,同样也有ctid,格式 “(blockid,slotid)”,通过ctid也能快速的访问数据。但问题在于KingbaseES的MVCC机制,使得ctid会随update操作变化,这种情况下,使用ctid有可能访问不到数据。

arthemis_14的博客 314

金仓数据库 KingbaseES 与 Oracle 的兼容性说明(3. 常用函数)

数值函数1/取第一个参数除以第二个参数的余数,参数类型是number或者可以转换为number的2/当n2为NaN时,函数返回n1当n2不为NaN时,函数返回n2,参数类型是浮点数3/cbrt(dp)立方根函数4/把弧度转换为角度5/把角度转换为弧度6/y/x的整数商7/pi()常数值8/返回参数的精度,小数点后位数字符函数1chr(int)。5返回字符串的起始位置,或者结束位置。。6/返回指定字符串位置7。...

arthemis_14的博客 1510

人大金仓数据库KingbaseES DCI中的大对象处理

/ 结构体头部,head type= DCI_DTYPE_LOBub4 loid;// 初始为0,1 for BLOB(lobType_BLOB)0, 2 for CLOB(lobType_CLOB)int len;// buf数组中已有数据的长度bytes for BLOB, characters for CLOB//判断定位器是否打开的标志,标记是否为第一次读取或者写入,初始值为-1,表示第一次读取{-1,1}//是否手动开启//是否打开lob定位器缓冲功能char *buf;

arthemis_14的博客 388

金仓数据库存储过程参数模式详解:IN、OUT、IN OUT的性能差异与选型指南

在数据库编程中,存储过程参数传递机制是影响程序性能和可维护性的关键因素。参数模式定义了数据在调用者和被调用程序单元之间的流动方向与内存操作方式,其核心原理涉及传值调用与传址调用的区别。理解这些底层机制的技术价值在于,能够帮助开发者编写出更高效、更可靠的数据库代码,避免因参数误用导致的性能瓶颈和隐蔽错误。在实际应用场景中,特别是在数据库迁移和异构系统集成时,参数模式的正确选择显得尤为重要。例如,在国产金仓数据库的Oracle兼容模式下,误将IN参数改为IN OUT模式,可能会向优化器传递错误信号,阻碍查询优化

weixin_34122810的博客 368

金仓数据库KingbaseES 与Oracle 函数稳定性对于性能影响差异比较

可以看到,对于相同的输入参数, test_immutable 在同一query 只执行一次,volatile 与 stable 则要执行多次。为了得到最佳的优化结果,在创建函数时我们应该指定严格的稳定性级别。结论:Oracle 函数对于每个id 值都要执行一次,但如果id 是相同的,Oracle 则只需要执行一次。可以看到三个函数调用时间基本没有差别,因为,传入的参数是id 变量值(虽然实际值是相同的)。可以看到,对于常量值,stable 和 immutable 类型的函数实际只需调用一次。

arthemis_14的博客 748
上一篇: uniapp集成Android原生sdk
下一篇: git 拉取项目时切换账号密码
AImmortaI
博客等级 码龄11年 48粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值