达梦数据库(DM8)存储过程函数使用

本文详细介绍了DM8数据库中存储过程的创建与使用,包括带参数和无参数存储过程的创建及调用,同时展示了匿名块的测试。此外,还探讨了DM数据库的常用内置函数,如数值、字符串、日期时间、空值判断和类型转换等函数的使用,为高效操作数据库提供支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DM8数据库的过程函数的编写主要分为4个部分:过程头部分,声明定义部分,执行部分和异常处理部分。

存储过程创建与使用

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。

创建带参数储存过程

– 创建测试表

create table test_tab (id int primary key, name varchar(30));

– 创建有参数储存过程p_test

create or replace procedure p_test(i in int)
as j int;
begin
for j in 1 ..i loop
insert into test_tab values(j,'p_test'||j);
end loop;
end;

– 执行调用过程

p_test(3);

– 对表进行查询

select * from test_tab;

 运行结果如下图所示:

 创建无参数储存过程

– 创建无参数储存过程p_test2

create or replace procedure p_test2 as j int;
begin
for j in 10 ..13 loop
insert into test_tab values(j,'p_test2:'||j);
end loop;
end;

 – 执行调用过程

p_test2;

– 对表进行查询

select * from test_tab;

运行结果如下图所示

 匿名块测试

– 匿名块测试语句

begin
print('hello world');
end;

运行结果如下图所示

– 语句块测试循环输出

begin
for i in 1..3 loop
print('输出:'||i);
end loop;
end;

 运行结果如下图所示

 

DM函数使用 

DM 数据库函数可以帮助用户更加方便地处理表中的数据。函数不但可以在 SELECT 查询语句中使用,同样可以在 INSERT、UPDATE、DELETE 等语句中使用。这些函数丰富了 SQL 的语言功能,为 DMSQL 提供了更多的操作性。DM 数据库函数可以接受零个或者多个输入参数,并返回一个输出结果。

– 函数演示

select len('hello world  ');  --LEN(char):返回char的长度,不包括尾部的空字符串。

 结果输出如下图所示

 

select length('hello world  ');  --LENGTH(char):返回char的长度,包含尾部的空字符串。

 结果输出如下图所示

 DM 数据库常用内置函数和说明

数值函数

序号函数名功能简要说明
1ABS(n)求数值 n 的绝对值
2ACOS(n)求数值 n 的反余弦值
3ASIN(n)求数值 n 的反正弦值
4ATAN(n)求数值 n 的反正切值
5ATAN2(n1,n2)求数值 n1/n2 的反正切值
6CEIL(n)求大于或等于数值 n 的最小整数
7CEILING(n)求大于或等于数值 n 的最小整数,等价于 CEIL(n)
8COS(n)求数值 n 的余弦值
9COSH(n)求数值 n 的双曲余弦值
10COT(n)求数值 n 的余切值
11DEGREES(n)求弧度 n 对应的角度值
12EXP(n)求数值 n 的自然指数
13FLOOR(n)求小于或等于数值 n 的最大整数
14GREATEST(n1,n2,n3)求 n1、n2 和 n3 三个数中最大的一个
15GREAT (n1,n2)求 n1、n2 两个数中最大的一个
16LEAST(n1,n2,n3)求 n1、n2 和 n3 三个数中最小的一个
17LN(n)求数值 n 的自然对数
18LOG(n1[,n2])求数值 n2 以 n1 为底数的对数
19LOG10(n)求数值 n 以 10 为底的对数
20MOD(m,n)求数值 m 被数值 n 除的余数
21PI()得到常数 π
22POWER(n1,n2)/POWER2(n1,n2)求数值 n2 以 n1 为基数的指数
23RADIANS(n)求角度 n 对应的弧度值
24RAND([n])求一个 0 到 1 之间的随机浮点数
25ROUND(n[,m])求四舍五入值函数
26SIGN(n)判断数值的数学符号
27SIN(n)求数值 n 的正弦值
28SINH(n)求数值 n 的双曲正弦值
29SQRT(n)求数值 n 的平方根
30TAN(n)求数值 n 的正切值
31TANH(n)求数值 n 的双曲正切值
32TO_NUMBER (char [,fmt])将 CHAR、VARCHAR、VARCHAR2 等类型的字符串转换为 DECIMAL 类型的数值
33TRUNC(n[,m])截取数值函数
34TRUNCATE(n[,m])截取数值函数,等价于 TRUNC(n[,m])
35TO_CHAR(n [, fmt [,’nls’ ] ])将数值类型的数据转换为 VARCHAR 类型输出
36BITAND(n1, n2)求两个数值型数值按位进行 AND 运算的结果

字符串函数

序号函数名功能简要说明
1ASCII(char)返回字符对应的整数
2ASCIISTR(char)将字符串 char 中,非 ASCII 的字符转成 \XXXX (UTF-16) 格式,ASCII 字符保持不变
3BIT_LENGTH(char)求字符串的位长度
4CHAR(n)返回整数 n 对应的字符
5CHAR_LENGTH(char)/CHARACTER_LENGTH(char)求字符串的串长度
6CHR(n)返回整数 n 对应的字符,等价于 CHAR(n)
7CONCAT(char1,char2,char3,…)顺序联结多个字符串成为一个字符串
8DIFFERENCE(char1,char2)比较两个字符串的 SOUNDEX 值之差异,返回两个 SOUNDEX 值串同一位置出现相同字符的个数。
9INITCAP(char)将字符串中单词的首字符转换成大写的字符
10INS(char1,begin,n,char2)删除在字符串 char1 中以 begin 参数所指位置开始的n 个字符,再把 char2 插入到 char1 串的 begin 所指位置
11INSERT(char1,n1,n2,char2)/INSSTR(char1,n1,n2,char2)将字符串 char1 从 n1 的位置开始删除 n2 个字符,并将 char2 插入到 char1 中 n1 的位置
12INSTR(char1,char2[,n,[m]])从输入字符串 char1 的第 n 个字符开始查找字符串char2 的第 m 次出现的位置,以字符计算
13INSTRB(char1,char2[,n,[m]])从 char1 的第 n 个字节开始查找字符串 char2 的第 m次出现的位置,以字节计算
14LCASE(char)将大写的字符串转换为小写的字符串
15LEFT(char,n) /LEFTSTR(char,n)返回字符串最左边的 n 个字符组成的字符串
16LEN(char)返回给定字符串表达式的字符(而不是字节)个数(汉字为一个字符),其中不包含尾随空格
17LENGTH(char)返回给定字符串表达式的字符(而不是字节)个数(汉字为一个字符),其中包含尾随空格
18OCTET_LENGTH(char)返回输入字符串的字节数
19LOCATE(char1,char2[,n])返回 char1 在 char2 中首次出现的位置
20LOWER(char)将大写的字符串转换为小写的字符串
21LPAD(char1,n,char2)在输入字符串的左边填充上 char2 指定的字符,将其拉伸至 n 个字节长度
22LTRIM(char1,char2)从输入字符串中删除所有的前导字符,这些前导字符由
23POSITION(char1,/ IN char2)求串 1 在串 2 中第一次出现的位置
24REPEAT(char,n) /REPEATSTR(char,n)返回将字符串重复 n 次形成的字符串
25REPLACE(STR, search[,replace] )将输入字符串 STR 中所有出现的字符串 search 都替换成字符串 replace,其中 STR 为 char、clob 或 text 类型
26REPLICATE(char,times)把字符串 char 自己复制 times 份
27REVERSE(char)将字符串反序
28RIGHT / RIGHTSTR(char,n)返回字符串最右边 n 个字符组成的字符串
29RPAD(char1,n,char2)类似 LPAD 函数,只是向右拉伸该字符串使之达到 n 个字节长度
30RTRIM(char1,char2)从输入字符串的右端开始删除 char2 参数中的字符
31SOUNDEX(char)返回一个表示字符串发音的字符串
32SPACE(n)返回一个包含 n 个空格的字符串
33STRPOSDEC(char)把字符串 char 中最后一个字符的值减一
34STRPOSDEC(char,pos)把字符串 char 中指定位置 pos 上的字符值减一
35STRPOSINC(char)把字符串 char 中最后一个字符的值加一
36STRPOSINC(char,pos)把字符串 char 中指定位置 pos 上的字符值加一
37STUFF(char1,begin,n,char2)删除在字符串 char1 中以 begin 参数所指位置开始的 n 个字符,再把 char2 插入到 char1 串的 begin 所指位置
38SUBSTR(char,m,n)/ SUBSTRING(char FROM m [FORn])返回 char 中从字符位置 m 开始的 n 个字符
39SUBSTRB(char,n,m)SUBSTR 函数等价的单字节形式
40TO_CHAR(character)将 VARCHAR、CLOB、TEXT 类型的数据转化为 VARCHAR 类型输出
41TRANSLATE(char,from,to)将所有出现在搜索字符集中的字符转换成字符集中的相应字符
42TRIM([LEADING|TRAILING|BOTH] [exp] [] FROM char2])删去字符串 char2 中由串 char1 指定的字符
43UCASE(char)将小写的字符串转换为大写的字符串
44UPPER(char)将小写的字符串转换为大写的字符串
45REGEXP根据符合 POSIX 标准的正则表达式进行字符串匹配
46OVERLAY(char1 PLACINGchar2 FROM int [FOR int])字符串覆盖函数,用 char2 覆盖 char1 中指定的子串,返回修改后的 char1
47TEXT_EQUAL返回两个 LONGVARCHAR 类型的值的比较结果,相同返回 1,否则返回 0
48BLOB_EQUAL返回两个 LONGVARBINARY 类型的值的比较结果,相同返回 1,否则返回 0
49NLSSORT(str1[,nls_sort=str2])返回对汉字排序的编码
50GREATEST(char1, char2,char3)求 char 1、char 2 和 char 3 中最大的字符串
51GREAT (char1, char2)求 char 1、char 2 中最大的字符串
52TO_SINGLE_BYTE (char)将多字节形式的字符(串)转换为对应的单字节形式
53TO_MULTI_BYTE (char)将单字节形式的字符(串)转换为对应的多字节形式
54EMPTY_CLOB ()初始化 clob 字段
55EMPTY_BLOB ()初始化 blob 字段
56UNISTR (char)将字符串 char 中,ascii 码(‗\XXXX‘4 个 16 进制字符格式)转成本地字符。对于其他字符保持不变。
57ISNULL(char)判断表达式是否为 NULL

日期时间函数

序号函数名功能简要说明
1ADD_DAYS(date,n)返回日期加上 n 天后的新日期
2ADD_MONTHS(date,n)在输入日期上加上指定的几个月返回一个新日期
3ADD_WEEKS(date,n)返回日期加上 n 个星期后的新日期
4CURDATE()返回系统当前日期
5CURTIME(n)返回系统当前时间
6CURRENT_DATE()返回系统当前日期
7CURRENT_TIME(n)返回系统当前时间
8CURRENT_TIMESTAMP(n)返回系统当前带会话时区信息的时间戳
9DATEADD(datepart,n,date)向指定的日期加上一段时间
10DATEDIFF(datepart,date1,date2)返回跨两个指定日期的日期和时间边界数
11DATEPART(datepart,date)返回代表日期的指定部分的整数
12DAY(date)返回日期中的天数
13DAYNAME(date)返回日期的星期名称
14DAYOFMONTH(date)返回日期为所在月份中的第几天
15DAYOFWEEK(date)返回日期为所在星期中的第几天
16DAYOFYEAR(date)返回日期为所在年中的第几天
17DAYS_BETWEEN(date1,date2)返回两个日期之间的天数
18EXTRACT(时间字段 FROM date)抽取日期时间或时间间隔类型中某一个字段的值
19GETDATE(n)返回系统当前时间戳
20GREATEST(date1,date2,date3)求 date1、 date2 和 date3 中的最大日期
21GREAT (date1,date2)求 date1、 date2 中的最大日期
22HOUR(time)返回时间中的小时分量
23LAST_DAY(date)返回输入日期所在月份最后一天的日期
24LEAST(date1, date2, date3)求 date1、 date2 和 date3 中的最小日期
25MINUTE(time)返回时间中的分钟分量
26MONTH(date)返回日期中的月份分量
27MONTHNAME(date)返回日期中月分量的名称
28MONTHS_BETWEEN(date1,date2)返回两个日期之间的月份数
29NEXT_DAY(date1,char2)返回输入日期指定若干天后的日期
30NOW(n)返回系统当前时间戳
31QUARTER(date)返回日期在所处年中的季节数
32SECOND(time)返回时间中的秒分量
33ROUND (date1[, fmt])把日期四舍五入到最接近格式元素指定的形式
34TIMESTAMPADD(datepart,n,timestamp)返回时间戳 timestamp 加上 n 个 datepart 指定的时间段的结果
35TIMESTAMPDIFF(datepart,timeStamp1,timestamp2)返回一个表明 timestamp2 与 timestamp1 之间的指定 datepart 类型时间间隔的整数
36SYSDATE()返回系统的当前日期
37TO_DATE(CHAR[,fmt[,’nls’]])
/TO_TIMESTAMP(CHAR[,fmt[,’nls’]])
/TO_TIMESTAMP_TZ(CHAR[,fmt])
字符串转换为日期时间数据类型
38FROM_TZ(timestamp,timezone|tz_name])将时间戳类型 timestamp 和时区类型 timezone(或时区名称 tz_name )转化为 timestamp withtimezone 类型
39TRUNC(date[,fmt])把日期截断到最接近格式元素指定的形式
40WEEK(date)返回日期为所在年中的第几周
41WEEKDAY(date)返回当前日期的星期值
42WEEKS_BETWEEN(date1,date2)返回两个日期之间相差周数
43YEAR(date)返回日期的年分量
44YEARS_BETWEEN(date1,date2)返回两个日期之间相差年数
45LOCALTIME(n)返回系统当前时间
46LOCALTIMESTAMP(n)返回系统当前时间戳
47OVERLAPS返回两个时间段是否存在重叠
48TO_CHAR(date[,fmt[,nls]])将日期数据类型 DATE 转换为一个在日期语法 fmt 中指定语法的 VARCHAR 类型字符串。
49SYSTIMESTAMP(n)返回系统当前带数据库时区信息的时间戳
50NUMTODSINTERVAL(dec,interval_unit)转换一个指定的 DEC 类型到 INTERVAL DAY TOSECOND
51NUMTOYMINTERVAL(dec,interval_unit)转换一个指定的 DEC 类型值到 INTERVAL YEAR TOMONTH
52WEEK(date, mode)根据指定的 mode 计算日期为年中的第几周
53UNIX_TIMESTAMP (datetime)返回自标准时区的’1970-01-01 00:00:00 +0:00’的到本地会话时区的指定时间的秒数差
54FROM_UNIXTIME(unixtime)返回将自’1970-01-01 00:00:00’的秒数差转成本地会话时区的时间戳类型
55FROM_UNIXTIME(unixtime,fmt)将自’1970-01-01 00:00:00’的秒数差转成本地会话时区的指定 fmt 格式的时间串
56SESSIONTIMEZONE返回当前会话的时区
57DATE_FORMAT(d, format)以不同的格式显示日期/时间数据
58TIME_TO_SEC(d)将时间换算成秒
59SEC_TO_TIME(sec)将秒换算成时间
60TO_DAYS(timestamp)转换成公元 0 年 1 月 1 日的天数差

空值判断函数

序号函数名功能简要说明
1COALESCE(n1,n2,…nx)返回第一个非空的值
2IFNULL(n1,n2)当 n1 为非空时,返回 n1;若 n1 为空,则返回 n2
3ISNULL(n1,n2)当 n1 为非空时,返回 n1;若 n1 为空,则返回 n2
4NULLIF(n1,n2)如果 n1=n2 返回 NULL,否则返回 n1
5NVL(n1,n2)返回第一个非空的值
6NULL_EQU返回两个类型相同的值的比较

类型转换函数

序号函数名功能简要说明
1CAST(value AS 类型说明)将 value 转换为指定的类型
2CONVERT(类型说明,value)将 value 转换为指定的类型
3HEXTORAW(exp)将 exp 转换为 BLOB 类型
4RAWTOHEX(exp)将 exp 转换为 VARCHAR 类型
5BINTOCHAR(exp)将 exp 转换为 CHAR
6TO_BLOB(value)将 value 转换为 blob

杂类函数

序号函数名功能简要说明
1DECODE(exp, search1,result1, … searchn, resultn[,default])查表译码
2ISDATE(exp)判断表达式是否为有效的日期
3ISNUMERIC(exp)判断表达式是否为有效的数值
4DM_HASH (exp)根据给定表达式生成 HASH 值
5LNNVL(condition)根据表达式计算结果返回布尔值
6LENGTHB(value)返回 value 的字节数
7FIELD(value, e1, e2, e3,e4…en)返回 value 在列表 e1,e2,e3,e4…en 中的位置序号,不在输入列表时则返回 0

 达梦技术社区地址:https://eco.dameng.com

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值