DM8简单使用存储过程
路鹏
存储过程(Stored Procedure),可以理解为在数据库中预存一段代码,之后可以手动执行或者使用job定时调度执行。存储过程具有方便维护,高安全性,可复用等众多优点,非常适合处理日常中简单的日常数据调度问题,然而却十分不推荐使用存过程去处理复杂业务,这会导致冗长的sql代码和复杂的逻辑关系,导致该存储过程十分脆弱且难以维护,反然而发挥不出存储过程的优点
达梦也是可以创建存储过程的,该示例全程在DM8版本下运行
首先知道自己的ip地址,注意是主机ip而不是虚拟机ip!
之后
export DISPLAY=自己ip:0.0
之后xhost +
再跳转至数据库安装目录下的/tool,./manager 即可
这里方向键乱码不是说像sqlplus那种无法使用方向键,而是指使用远程工具打开图形化时,方向键会变成4268这种数字
解决方式很简单,切换主机(就是window这头)的输入法为英文即可
如果你使用的是MobaXterm,那么可以按照下图的方式调整:
将键盘布局改为us,之后点击ok,将会关闭你现有的图形化窗口,再次启动即可恢复
达梦的图形化界面非常友好,可以直接查看存储过程
其中后红叉的就是有错误的存储过程,是无法执行的
查看存储过程:
select * from user_objects where object_type=('procedure')
查看存储过程详细:
select * from user_source where type=upper('procedure')
存储过程分为有参和无参,和编程语言一样,可以接收参数作为变量使用
无参:
create or replace procedure dm1
is
begin
delete test.t1;
insert into test.t1 values (1,'123');
commit;
end;
无参存储过程会在调用时执行 begin end 中的内容
有参数
create or replace procedure 存储过程名(参数 类型,.....)
is
begin
执行的sql
commit;
end;
有参存储过程在调用时需要传递参数,当参数有默认值时可忽略
drop procedure dmPro2
和编程语言一样,存储过程也可以声明变量用于临时存储值并使用,关键词为declare
变量的用途一般结合之后的语法使用
create or replace procedure 存储过程名
as
DECLARE
变量名 类型 ,.....
begin
` `方法
end;
为变量赋值
select XXX into 变量
此时调用上面的dm3存储过程,就会发现t1表添加了一条数据
也是和编程语言一样,判断if后的条件是或否,并执行不同的代码块
begin
if 条件 then
--代码—
else
--代码—
end if;
end;
这里就是判断t1表是否有数据,并插入不用的数据,因为t1表本身就有数据,所以插入id为3的数据
循环可能是最常用的语法了,与编程语言一样,再一定条件内反复执行某段代码
FOR 变量 IN resverse 1..10 LOOP
执行的sql
END LOOP;
执行后
首先要在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;
调用后查询就可以看到插入的数据了
文章
阅读量
获赞