Oracle数据库基础--存储过程和函数
一、存储过程和函数
存储过程: 对一个模块的封装
函数: 功能与存储过程几乎一样
区别:
函数必须通过return 关键字返回一个值
存储过程:
不需要return返回值
参数:
输入型参数
输出型参数
输入(输出)型参数
什么时候用存储过程, 什么时候用函数
一般来讲, 当只有一个返回值的时候用函数,
当没有返回值或者需要多个返回值的时候, 用存储过程
二.首先看一下SQL基础
先看要举例的表的内容:

下面开始操作:
首先建一个新的SQL Window:
DECLARE
--声明变量
/*
引用型变量--当前用户下表中的某一列
记录型变量--当前用户下表中的某一行
*/ I NUMBER;
A STUDENT.SNAME%TYPE; --引用型变量,指student表中的sname列
B STUDENT%ROWTYPE; --记录型变量,当前用户下表中的某一行,根据附加条件选出是哪一行 BEGIN
--开始 I := 107;
SELECT S.SNAME INTO A FROM STUDENT S WHERE S.SNO = I;
DBMS_OUTPUT.PUT_LINE('查询结果,a的值为:' || A); --SOL中字符串的拼接用 || SELECT * INTO B FROM STUDENT S WHERE S.SNO = I;
DBMS_OUTPUT.PUT_LINE('查询结果,b的值为:' || B.SNAME); --通过b.~的形式把b中的某一列取出来 END; --结尾![]()
三、游标(cursor)
学会使用游标遍历student表中的学生姓名
--游标(可以看作集合,里面装的是一个个记录型变量),有四个属性, /*
ISOPEN --游标是否打开
NOTFOUND --bolean值,返回true 或者 false
FOUND --bolean值,返回true 或者 false
ROWCOUNT --已经取出的记录的行数,相当于改变几行就输出几
*/ DECLARE
STU STUDENT%ROWTYPE; CURSOR STUS IS
SELECT * FROM STUDENT; BEGIN OPEN STUS; LOOP
FETCH STUS
INTO STU;
EXIT WHEN STUS%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(STU.SNAME);
END LOOP; CLOSE STUS; END;

四、存储过程(procedure)
输入student表中的班级号,输出学生姓名
第一步:新建SQL Window,编译一段SQL语句,把编译好的语句放到了procedures文件目录下(这是一个查询的存储过程)
CREATE OR REPLACE PROCEDURE HANQI(SCLA IN NUMBER) AS
CURSOR STUS IS
SELECT * FROM STUDENT S WHERE S.CLASS = SCLA;
STU STUDENT%ROWTYPE; BEGIN OPEN STUS; LOOP
FETCH STUS
INTO STU;
EXIT WHEN STUS%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(STU.SNAME);
END LOOP; CLOSE STUS; END;
第二步、重新建立一个Test Window,调用一下存储过程
-- Created on 2017/8/18 by ASUS
declare
-- Local variables here
i integer;
begin
-- Test statements here
hanqi(95031);--在Test窗口中,直接调用就可以了
end; 输出信息为:

第三、看一下命令窗口 Command Window,也可以调用存储过程
Connected to Oracle Database 11g Express Edition Release 11.2.0.2.0
Connected as test@XE SQL> select * from student;
SNO SNAME SSEX SBIRTHDAY CLASS
--- ------ ---- ----------- ----------
108 曾华 男 1977/9/1 95033
105 匡明 男 1975/10/2 95031
107 王丽 女 1976/1/23 95033
101 李军 男 1976/2/20 95033
109 王芳 男 1975/2/10 95031
103 陆君 男 1974/6/3 95031
6 rows selected SQL> set serveroutput on;
SQL> execute hanqi(95031);
匡明
王芳
陆君
PL/SQL procedure successfully completed
五、函数(function)
函数的构造方法和存储过程类似
CREATE OR REPLACE FUNCTION CAL_ADD(A IN NUMBER, B IN NUMBER) RETURN NUMBER AS
C NUMBER;
BEGIN
C := A + B;
RETURN C;
END;
直接调用函数:

六、输出型参数(可以用来当作一个存储过程的返回值,可以是一个,也可以是多个)
新建Sql Window:
CREATE OR REPLACE PROCEDURE HANQI3(SCLA IN NUMBER, VARI OUT NUMBER) AS BEGIN
UPDATE STUDENT S SET S.SSEX = '女' WHERE S.CLASS = SCLA;
SELECT COUNT(*) INTO VARI FROM STUDENT S WHERE S.CLASS = SCLA;
END;
新建Test Window:
-- Created on 2017/8/18 by ASUS
DECLARE
-- Local variables here
I INTEGER;
BEGIN
-- Test statements here
HANQI3(95031, I);
DBMS_OUTPUT.PUT_LINE('被修改的记录条数:' || I);--有输出型参数的得在Text Window下调用,并打印
END; 执行结果为:

可以通过输出型参数,让存储过程有返回值
Oracle数据库基础--存储过程和函数的更多相关文章
- 第一章 oracle数据库基础
第一章 oracle数据库基础 1.oracle简介-->数据库管理系统 1.1:数据库 1.2:全局数据库名 1.3:数据库实例 1.4:表空间 1.5:数据 ...
- Oracle数据库基础入门《二》Oracle内存结构
Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...
- Oracle数据库基础入门《一》Oracle服务器的构成
Oracle数据库基础入门<一>Oracle服务器的构成 Oracle 服务器是一个具有高性能和高可靠性面向对象关系型数据库管理系统,也是一 个高效的 SQL 语句执行环境. Oracle ...
- 用sql语句导出oracle中的存储过程和函数
用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' repl ...
- Oracle数据库基础知识
oracle数据库plsql developer 目录(?)[-] 一 SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...
- 【学习笔记】Y2-1-1 Oracle数据库基础
Oracle 简介关系型(二维表)数据库 用来存储海量数据在大数据量的并发检索的情况下,性能要高于其他同类数据库产品一般运行环境是Linux和UnixOracle版本中的I(Internet) G(G ...
- Oracle 数据库 基础学习 (一) SQL基本知识
Oracle 从零开始,不知所措.要掌握一种技能,最好的方式是先学会怎么使用它,然后再深入学习,先有样子,再有技术. 一,什么是数据库? 为什么需要数据库? 数据库实质上是一个信息的列表,或者是一 ...
- Oracle数据库 基础SQL语句练习
一.说明 第一次使用Oracle,想做一些练习,熟悉一些oracle. 表:使用的是scott用户,默认的表 具体表讲解,可以参考该文档:https://www.cnblogs.com/xjcheng ...
- [转载]Oracle数据库基础--SQL查询经典例题
Oracle基础练习题,采用Oracle数据库自带的表,适合初学者,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用 本文使用的实例表结构与表的数据如下: emp员工表结构如下: ...
随机推荐
- CSS3的box-shadow
基础说明: 外阴影:box-shadow: X轴 Y轴 Rpx color; 属性说明(顺序依次对应): 阴影的X轴(可以使用负值) 阴影的Y轴(可以使用负值) 阴影 ...
- 解决vagrant不能正常挂载目录的问题
解决方案: vagrant plugin install vagrant-vbguest
- go--互斥锁
解读: main函数里调用了两次lockPrint方法,这个方法中的println(i, "in lock")这句话,由于是在Mutex的Lock和Unlock之间,所以在第一次调 ...
- linux系统故障分析与排查
在处理Linux系统出现的各种故障时,故障的症状是最先发现的,而导致这以故障的原因才是最终排除故障的关键.熟悉Linux系统的日志管理,了解常见故障的分析与解决办法,将有助于管理员快速定位故障点.“对 ...
- 【2048小游戏】——原生js爬坑之封装行的移动算法&事件
引言:2048小游戏的核心玩法是移动行,包括横行和纵行,玩家可以选择4个方向,然后所有行内的数字就会随着行的移动而向特定的方向移动.这个行的移动是一个需要重复调用的算法,所以这里就要将一行的移动算法封 ...
- 2017.2.28 activiti实战--第六章--任务表单(二)外置表单
学习资料:<Activiti实战> 第六章 任务表单(二)外置表单 6.3 外置表单 考虑到动态表单的缺点(见上节),外置表单使用的更多. 外置表单的特点: 页面的原样显示 字段值的自动填 ...
- linux中ps命令的用法说明
在linux中使用ps命令可以查看有哪些进程在运行和运行的状态.进程是否结束.进程有没有僵尸.哪些进程占用了过多的资源等等. ps命令最常用的是用于监控后台进程的工作情况. 名称:ps www. ...
- MD5算法了解(JAVA实现)
MD5算法:尽管已经被破解,但任然广泛应用于各个领域中 如文件校验:当我们下载文件时为了保证文件的安全性,我们能够在其站点上找到相应的md5值进行校验,假设md5值不一致,也就是说文件被人动过(一般都 ...
- RPi Cam v2 之一:基础及牛刀小试
前言 原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正. 本文使用markdown写成,为获得更好的阅读体验,可以访问我的博客. 1.unboxing & comparison 包 ...
- 【SharePoint】SharePoint 2013 使用PreSaveAction自定义客户端验证
使用PreSaveAction函数实现客户端自定义验证. 例:[项目编号]为空时,必须填写[责任者]项.(其中[项目编号]为单行文本框,[责任者]为用户/组选择框.) function PreSave ...