注册
存储过程简介(粗略介绍)
培训园地/ 文章详情 /

存储过程简介(粗略介绍)

λόγος 2023/05/19 2300 0 0

DM8简单使用存储过程

路鹏

前言

存储过程(Stored Procedure),可以理解为在数据库中预存一段代码,之后可以手动执行或者使用job定时调度执行。存储过程具有方便维护,高安全性,可复用等众多优点,非常适合处理日常中简单的日常数据调度问题,然而却十分不推荐使用存过程去处理复杂业务,这会导致冗长的sql代码和复杂的逻辑关系,导致该存储过程十分脆弱且难以维护,反然而发挥不出存储过程的优点

达梦也是可以创建存储过程的,该示例全程在DM8版本下运行

使用帮助

MobaXterm中调用图形化软件

首先知道自己的ip地址,注意是主机ip而不是虚拟机ip!

之后

export DISPLAY=自己ip:0.0
image.png

之后xhost +

image.png

再跳转至数据库安装目录下的/tool,./manager 即可

image.png

方向键乱码

这里方向键乱码不是说像sqlplus那种无法使用方向键,而是指使用远程工具打开图形化时,方向键会变成4268这种数字

解决方式很简单,切换主机(就是window这头)的输入法为英文即可

如果你使用的是MobaXterm,那么可以按照下图的方式调整:

image.png

将键盘布局改为us,之后点击ok,将会关闭你现有的图形化窗口,再次启动即可恢复

存储过程

再dm8中查看存储过程

达梦的图形化界面非常友好,可以直接查看存储过程

其中后红叉的就是有错误的存储过程,是无法执行的

image.png

sql查询

查看存储过程:

select * from user_objects where object_type=('procedure')

image.png

查看存储过程详细:

select * from user_source where type=upper('procedure')

image.png

创建存储过程

存储过程分为有参和无参,和编程语言一样,可以接收参数作为变量使用

无参:

create or replace procedure dm1 is begin delete test.t1; insert into test.t1 values (1,'123'); commit; end;

image.png

无参存储过程会在调用时执行 begin end 中的内容

有参数

image.png

create or replace procedure 存储过程名(参数 类型,.....) is begin 执行的sql commit; end;

有参存储过程在调用时需要传递参数,当参数有默认值时可忽略

删除存储过程

drop procedure dmPro2

image.png

调用存储过程

有参数调用

image.png

无参数调用

image.png

在存储过程中声明变量

和编程语言一样,存储过程也可以声明变量用于临时存储值并使用,关键词为declare

变量的用途一般结合之后的语法使用

create or replace procedure 存储过程名 as DECLARE 变量名 类型 ,..... begin ` `方法 end;

image.png

image.png

为变量赋值

select XXX into 变量

此时调用上面的dm3存储过程,就会发现t1表添加了一条数据

image.png

判断

也是和编程语言一样,判断if后的条件是或否,并执行不同的代码块

begin if 条件 then --代码— else --代码— end if; end;

image.png

这里就是判断t1表是否有数据,并插入不用的数据,因为t1表本身就有数据,所以插入id为3的数据

image.png

循环

循环可能是最常用的语法了,与编程语言一样,再一定条件内反复执行某段代码

简单循环

FOR 变量 IN resverse 1..10 LOOP 执行的sql END LOOP;

image.png
执行后
image.png

使用游标

首先要在declare处定义,之后就可以在for循环处使用了

create or replace procedure dm6 as declare i int; cursor t1Data1 is select \* from test.t1; begin for t1Data in t1Data1 loop select count(0)+100 into i from test.t1 ; insert into test.t1 values(i,t1Data.id||t1Data.name); commit; end loop; end;

image.png

调用后查询就可以看到插入的数据了
image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服