这篇文章主要介绍了神谕存储过程案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
创建简单存储过程(Hello World)
为了方便读者简单易懂,我将下面使用到的表复制给大家。
具体表中的数据,请大家自己填写
-创建表格
创建表电磁脉冲(electromagnetic pulse)
(
empno编号(4)不为空,
ename VARCHAR2(10),
job VARCHAR2(9),
经理编号(4),
雇佣日期,
萨尔数(7,2),
通信号(7,2),
部门编号(2)
)
创建或替换过程firstP(varchar 2中的名称)是
/*这里名字为的参数,在为输入,varchar2为类型*/
开始
/* DBMS _ outputput _ line();相当输出到控制台上,这样我们一个简单的存储过程就完成啦
记住一句话的结束使用分号结束,存储过程写完一定要执行
将它保存到数据库中(F8)快捷键,或者点击左上角执行*/
dbms_output.put_line('我的名字叫| |姓名);/*dbms_output.put_line相当于Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)中的System.out.println('我的名字叫姓名);*/
结束优先p
下面我们要对刚刚写过的存储过程进行测试,我们开启测试窗口这个窗口
-创建于2018年12月30日星期日由管理员
声明
-这里是局部变量
/*测试名称名称类型使用:=给参数赋值,在多说一句,分号结束本句*/
name2 varchar2(64):='数据库;
开始
-此处测试语句
firstp(名称2);
结束;
我们打开数据库管理系统输出就可以看到执行的存储过程啦。
存储过程IF判断
创建或替换过程isifp(年龄数)是
/*存储过程如果判断以然后开始,以结束如果;结束*/
开始
如果(30岁)那么
dbms_output.put_line('我已经超过30岁了');
其他
如果(10岁)那么
dbms_output.put_line('我还是个儿童');
其他
dbms_output.put_line('我正在奋斗时期');
结束如果;
结束如果;
结束;
存储过程输出
创建或替换过程输入dout(姓名输入varchar2,年龄输入数字,输出varchar 2)为
/*英寸代表输入,出局代表输出*/
开始
输出:='我的名字是' ||姓名|| ',我的年龄是' | |年龄;/*相当于Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)中的返回输出,但是请注意,存储过程中可以返回多个值*/
结束于出;
测试输出代码
-创建于2018年12月30日星期日由管理员
声明
-这里是局部变量
name varchar2(64):='数据库;
年龄号:=06;
out _ p varchar 2(64);
开始
-此处测试语句
inandout(姓名,年龄,输出=:out _ p);
/*这里的输出是存储过程中的输出参数,out_p是在测试中使用的别名*/
结束;
返回游标
将过程sysrefcursor(id在数字中,列在系统引用光标之外)创建或替换为
/* sys _ ref游标外的列为输出游标*/
开始
为打开列
从员工中选择*其中empno=id
结束;
测试游标
第一种测试方法
-创建于2018年12月30日星期日由管理员
声明
-这里是局部变量
游标电子工程师是从员工中选择*其中empno=7934
开始
-此处测试语句
对于电子工程师循环中的e
DBMS _ outputput _ line(' deptno:' | | e . deptno);
结束循环;
结束;
输出结果如下:
第二种测试方法
-创建于2018年12月30日星期日由管理员
声明
-这里是局部变量
游标电子工程师是从员工中选择*其中empno=7934
curee % rowtype
开始
-此处测试语句
打开ee;
环
把电子工程师取成坏蛋
当ee %未找到时退出;
DBMS _ outputput _ line(' name:' | | cur。ename);
结束循环;
关闭ee;
结束;
上面测试结果仅仅返回一条数据。下面我来演示返回多条数据的情况。
首先请看我表中的数据
有两个工作中内容为职员的数据。
-创建于2018年12月30日星期日由管理员
声明
-这里是局部变量
游标电子工程师是select * from emp,其中职员
开始
-此处测试语句
对于电子工程师循环中的e
DBMS _ outputput _ line(' deptno:' | | e . deptno);
结束循环;
结束;
游标返回多条数据。
由于对于初学者来说,光标可能不容易理解,所以我将用JAVA来描述它们。
当我们在java程序中编写条件查询时,返回的数据是List generic。这个操作相当于一个光标。说白了就是一个查询。(不要误认为是这么简单的SQL。为什么要用光标?因为只是为了方便读者学习光标。具体商业分析请不要推杠。)
当我们要使用列表中的数据,用循环调用某一段数据的时候,是不是要用实体类对象指向get字段?可以理解为对于ee循环中的e DBMS _ output . put _ line(' deptno:' | | e . deptno);结束循环;
这里是E.deptno。
获取table中的column
创建或替换过程intop(id in number,print2 out varchar2)为
e _ name varchar 2(64);
开始
select ename into e_name from emp其中empno=id
如果e_name='ALLEN '那么
DBMS _ output . put _ line(e _ name);
print2:='我的名字是' | | e _ name
否则如果e_name='SMITH '那么
2:=' print 2:=SQL ' | | e _ name;
其他
2:=' print 2:=others ';
结束if;
结束if;
end intop
稍微复杂一点存储过程
因为这里有个朋友有使用存储过程的需求,然后更新博客。
让我们先创建一个表。
-创建表格
创建表类
(
身份证号不为空,
名称VARCHAR2(14),
class sc varchar 2(10),
序列号(5)
)
表空间用户
pctfree 10
initrans 1
maxtrans 255
储存;储备
(
初始64K
下一个1M
minextents 1
maxextents无限制
);
-创建/重新创建主、唯一和外键约束
更改表类
添加约束PK_CLASSES主键(ID)
使用索引
表空间用户
pctfree 10
initrans 2
maxtrans 255
储存;储备
(
初始64K
下一个1M
minextents 1
maxextents无限制
);
让我们创建一个序列
-创建序列
创建序列SEQ _分类
最小值1
最大值999999999999999999999999999999999
从2开始
增加1
高速缓存20;
我希望您不介意我创建下面的存储过程,并以一种混乱的方式编写它。
创建或替换过程声明(varchar2,
varchar中的classescs)为
/*实际上就是我们创建存储过程时的样子*/
身份证号;/*设置变量名*/
c数;
序列号;
开始
从dual中选择SEQ _类. nextval到id;/*获取下一个序列并使用into为变量名id赋值*/
DBMS _ output . put _ line(' classes cs=' | | classes cs);/*只是打印*/
select count(*)into c from Classes c=Classes cs;/*条件判断,classsc=变量传入*/
If (c 0) then/*当数量大于0时*/
select max(seq)1 into seq from Classes c=Classes cs;
DBMS _输出;put _ line(' first seq ' | | seq);
其他
如果(c=0)那么
seq:=0;/*如果查询次数为0,我们将seq变量赋给0*/
DBMS _ output . put _ line(seq ' | | seq when ' c=0);
结束if;
结束if;
插入到类中
(id,名称,类别c,顺序)
价值观念
(id、名称、类别、顺序);
/*insert insert这个不用说,大家都懂;请注意,我们必须在插入后提交。
否则,数据不会持久保存到数据库中,并且此插入没有任何意义*/
结束宣告;
我们称之为存储过程。
-由管理员创建于2019年1月7日星期一
声明
-这里是局部变量
Names varchar2(32):='晓明';
classcs varchar 2(32):=' Class 1 ';
开始
-此处测试语句
宣言(名称、类别);
结束;
这就是本文关于Oracle存储过程案例的详细解释。有关Oracle存储过程的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。