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;

执行结果为:

可以通过输出型参数,让存储过程有返回值
时间: 2024-10-24 15:29:17

Oracle数据库基础--存储过程和函数的相关文章

第一章 oracle数据库基础

第一章   oracle数据库基础 1.oracle简介-->数据库管理系统    1.1:数据库    1.2:全局数据库名    1.3:数据库实例    1.4:表空间    1.5:数据文件(扩展名:.dbf)    1.6:控制文件(扩展名:.ctl)    1.7:日志文件(扩展名:.log)    1.8:模式和模式对象2.连接oracle数据库    2.1 SQL*Plus工具    2.2 PL/SQL Developer工具3.配置oracle数据库    3.1 配置监听

用sql语句导出oracle中的存储过程和函数

用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' replace SELECT CASE WHEN LINE = 1 THEN 'CREATE OR REPLACE ' || TEXT WHEN LINE = MAX_LINE THEN TEXT || CHR(10 ) || '/' ELSE TEXT END FROM USER_SOURCE A LEF

Oracle数据库基础入门培训视频课程_Oracle视频教程培训

课程目标 Oracle视频教程,本套风哥oracle教程培训入门学习内容包括Oracle版本介绍,Oracle基本概念,Oracle物理结构,Oracle结构,Oracle数据文件,Oracle控制文件,Oracle参数文件,Oracle启动与停止,Oracle高用性架构,Oracle数据库备份与恢复,Oracle单机/OracleRAC/OracleDataGuard等相关基础等. 适用人群 IT相关从业人员,非IT相关人员 课程简介 视频学习地址:http://edu.51cto.com/c

Oracle数据库基础入门《一》Oracle服务器的构成

Oracle数据库基础入门<一>Oracle服务器的构成 Oracle 服务器是一个具有高性能和高可靠性面向对象关系型数据库管理系统,也是一 个高效的 SQL 语句执行环境. Oracle 服务器具备以下的特点: ● 能够可靠的进行多用户环境下大量数据的处理,允许多用户同时访问相同的数据. ● 保证数据访问的高性能. ● 有效防止对数据的非法访问. ● 对于故障恢复提供高效的解决方案. 一.Oracle 服务器的总体结构 Oracle 服务器同运行在操作系统下的很多程序一样,通过在后台运行一组

Oracle数据库基础知识

oracle数据库plsql developer 目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外键 创建删除索引 创建修改删除视图 二     SQL查询 基本的SQL语句 unionminusintersect 内连接外连接 子查询关联子查询 betweeninexists 复制表insert into selectselect into from 三     SQL查询优化 尽量少用 IN 操

Oracle数据库基础1

一.准备工具 1.Oracle数据库:全名oracle Datebase ,是甲骨文公司的一款关系数据库管理系统: 2.PL/SQL : PL/SQL Developer是一个集成开发环境专门面向开发Oracle数据库的应用,PL/SQL也是一种程序语言,叫做过程化SQL语言. 二.创建一个用户 打开PLSQ软件,在users文件夹中右键创建用户,设置用户名和口令,在角色权限选项里创建两个角色,应用后关闭软件重新打开登录即可. 查看服务:按win+R键打开弹窗,输入services.msc打开计

Oracle数据库基础知识点汇总

1.数据库 database 2.主键 ,表的唯一性标识的一列,主键的值永远不能重.primary key 主键的类型:单一主键:一列构成的:复合主键:多个列组合起来充当主键.多采用流水号,单一列当做主键 3.三大规则 :实体完整性约束:主键  :PK 参照完整性约束:外键 :A表的主键出现在B表,在B中就被成为外键,简称FK,此时A为主表,B从表 从表外键的值需要参照主表主键进行填充,或者从表外键的值为空,如果外键的值在主建中不存在,禁止填充 自定义约束:唯一性约束 unique(对NULL无

oracle数据库基础功能

一.oracle基本常用的数据类型 varchar(长度) 字符串char(长度) 字符number(x,y) x表示总位数 y表示保留小数点后几位数 eg面试题:number(5,3)最大的数是99.999decimal() 数字long int integer 整数date 日期timestamp 日期clob blob 特殊文本 二进制 二.DLL操作create创建表的前提是:1.具备创建表的条件 2.有可用的存储空间创建表的语法是:create table 表名 (column1 数据

Oracle 数据库基础——安装

一.数据库基础知识 1.概念 数据库全称数据库管理系统,简称DBMS,是一种在计算机中,针对数据进行管理.存储.共享的一种技术. 2.分类 数据库的发展过程中,按逻辑模型可分为以下几种: 3.关系型数据库 PS: 1.候选键.主键.外键都是需要用户来定义的,一般来说,这些键的定义都会和业务.真实数据匹配. 2.NF范式:在关系模型数据库中为了排除数据的冗余.数据的完整性.排除新增或删除数据的异常,通常引入范式的概念: 范式简称NF,总计有6种:1NF\2NF\3NF\BCNF\4NF\5NF;