存储过程1--清华大学计算中心ORACLE培训资料

合集下载

ORACLE存储过程详解教程

ORACLE存储过程详解教程

ORACLE存储过程详解教程ORACLE存储过程是一种预先编译的数据库对象,它包含了一组执行特定任务的SQL语句和程序逻辑。

存储过程可以在数据库中存储并被多个客户端应用程序调用,从而提高应用程序的性能和安全性。

在本篇文章中,我们将详细介绍ORACLE存储过程的概念、语法和使用方法。

一、存储过程的概念存储过程是一段预定义的SQL代码块,它可以接受参数并可选地返回结果。

存储过程在执行时可以访问数据库对象并执行事务处理。

存储过程可以被调用多次,减少了代码的编写和重复性的执行。

存储过程具有以下特点:1.存储过程是预先编译的,因此执行速度比动态SQL语句更快。

2.存储过程可以接受输入参数,并可以在参数基础上进行一系列的SQL操作。

3.存储过程可以返回一个或多个结果集。

4.存储过程可以包含条件判断、循环和异常处理等控制结构。

二、存储过程的语法创建存储过程的语法如下:CREATE [OR REPLACE] PROCEDURE procedure_name[ (parameter_name [IN,OUT] datatype [, ...]) ]IS[local_variable_declarations]BEGIN[executable_statements]EXCEPTION[exception_handling_statements]END;存储过程的语法包含以下几个部分:1.CREATE[ORREPLACE]PROCEDURE:指定创建一个存储过程。

CREATE关键字用于创建新的存储过程,而ORREPLACE关键字用于替换已存在的同名存储过程。

2. procedure_name:指定创建的存储过程的名称。

3. (parameter_name [IN,OUT] datatype[, ...]):指定存储过程的输入和输出参数。

参数的名称和数据类型必须指定,并且可以指定IN或OUT关键字来表示参数的传入和传出。

oracle培训材料

oracle培训材料

oracle培训材料数据库管理系统是计算机科学领域中的一个重要概念,它被广泛应用于各种企业和组织的信息管理中。

Oracle作为世界领先的关系数据库管理系统(RDBMS),在企业级应用中扮演着至关重要的角色。

为了帮助学习者更好地掌握Oracle技术,本文将提供一份详细的Oracle培训材料。

第一部分:Oracle简介Oracle作为一种关系型数据库管理系统,为企业级应用提供了稳定、安全、高效的数据存储和处理能力。

它具备许多强大的功能,如事务控制、数据完整性、数据安全性和多用户支持等。

Oracle还提供了丰富的工具和语言来管理和操作数据库,如SQL语言、PL/SQL语言以及Oracle企业管理界面等。

第二部分:Oracle的安装与配置在使用Oracle之前,我们首先需要进行安装和配置。

以下是一些基本步骤:1. 下载Oracle软件包:访问Oracle官方网站,下载与你系统版本相对应的软件包。

2. 安装Oracle软件:解压软件包,并按照安装向导的提示进行安装。

3. 创建数据库实例:使用Oracle提供的工具,创建一个数据库实例,并设置相关参数。

4. 配置监听器:监听器是连接客户端与数据库之间的桥梁,需要进行配置以确保正常通信。

5. 测试连接:使用SQL*Plus等工具,测试数据库连接是否成功。

第三部分:Oracle的基本操作学习Oracle的基本操作是掌握该技术的第一步,以下是一些常用的操作:1. 创建数据库表:使用CREATE TABLE语句来创建数据库表,指定表名和各个列的属性。

2. 插入数据:使用INSERT INTO语句向表中插入数据,可以一次插入多行记录。

3. 查询数据:使用SELECT语句从表中检索数据,可以使用WHERE子句来过滤结果。

4. 更新数据:使用UPDATE语句修改表中的数据,通过WHERE 子句指定要更新的记录。

5. 删除数据:使用DELETE语句删除表中的数据,也可以通过WHERE子句来限制删除的范围。

ORACLE存储过程详解教程

ORACLE存储过程详解教程

ORACLE存储过程详解教程Oracle存储过程是一种存储在数据库中的可重用的程序单元,它可以被调用并执行。

存储过程通常用于执行一系列相关的数据库操作,可以提高性能、可维护性和安全性。

1.存储过程的优势:-提高性能:存储过程可以减少网络通信的开销,因为它们在数据库服务器上执行,而不是在客户端上。

-改善可维护性:存储过程可以在数据库中进行维护和修改,而无需重新编译客户端应用程序。

-增强安全性:存储过程可以对敏感数据进行访问控制,并通过参数化查询来防止SQL注入攻击。

2.创建存储过程的语法:```sqlCREATE [OR REPLACE] PROCEDURE procedure_name[(parameter_name [IN , OUT , IN OUT] data_type [:= default_value])]IS--声明变量BEGIN--程序代码END [procedure_name];```-CREATE[ORREPLACE]PROCEDURE语句用于创建一个新的存储过程。

- procedure_name是存储过程的名称。

- parameter_name是参数的名称,可以使用IN、OUT或IN OUT修饰符指定参数的类型。

- data_type是参数的数据类型。

- default_value是参数的默认值。

-IS关键字用于声明存储过程的开头。

-BEGIN和END语句用于包围存储过程的代码。

3.存储过程的示例:下面是一个简单的存储过程示例,它返回指定员工的薪水:```sqlCREATE OR REPLACE PROCEDURE get_employee_salary(employee_id IN employees.employee_id%TYPE,salary OUT employees.salary%TYPE)ISBEGINSELECT salary INTO salaryFROM employeesWHERE employee_id = employee_id;END get_employee_salary;```- get_employee_salary是存储过程的名称。

清华大学计算中心ORACLE培训的资料

清华大学计算中心ORACLE培训的资料
Oracle9i在UNIX下的安装 (Sun Solaris)
Oracle9i 在Unix下安装步骤:
以root用户登录UNIX,创建Oracle用户 创建Oracle数据库安装目录,符合OFA 编辑Oracle用户的.profile文件,定义安
装必须的变量 配置操作系统核心 Reboot操作系统,以Oracle登录 运行安装文件开始安装…
E_mail:tengyc263
创 建 用 户
创建Oracle9i的 OFA安装目录
(Oracle8、Oracle8i、Oracle9i)
Oracle-OFA目录结构
在Unix下使用 OFA安装目录的优点:
对于大型数据库系统进行磁盘数据存储的优化分 配,以避免产生瓶颈
合理组织文件存储结构 防止磁盘失败、保证数据库安全 平衡磁盘I/O 对于$ORACLE_HOME目录进行文件分散 Unix目录独立性 数据库文件分散存储(镜像日志与控制文件)
Intelligent Agent
Oracle 实用工具
在线文档
E_mail:tengyc263
Oracle9i Server安装类型
Standard Edition: Preconfigured seed database Networking services Oracle Enterprise Manager Console Oracle utilities
Oracle9i Database 9.2.0 安装硬件需求
内存需求
Oracle9i Server: 512MB Oracle9i Management and Infrastructure:512M Oracle9i Client:256MB

PLSQL--清华大学计算中心ORACLE培训资料共29页文档

PLSQL--清华大学计算中心ORACLE培训资料共29页文档

2
PL/SQL语言的特点
减少对于Oracle核心的访问,降低网络负责 数据库数据类型集成
PL/SQL支持全部的SQL数据类型,这些共享的数据类型与 SQL所提供的直接存取相结合,使PL/SQL与Oracle数 据字典结合成一体. PL/SQL与Oracle RDBMS集成在一起,可以使用PL/SQL 的集成数据类型,使变量的数据类型在数据库的操作中实 时确定.
5. 模块式的过程化语言,以块为单位执行
6. 使用PL/SQL可以优化程序设计,得到更好的性能
(例如,执行 10个SQL语句,需要访问10次 Oracle核心,如果
10个SQL组成一个PL/SQL程序,则只需访问一次Oracle 核
心,将结果一次返回给用户,则程序执行效率高,节省时间,降
低通信量)
《PL/SQL程序设计》
%TYPE 属性 + 不必知道My_name的真正数据类型
+ 当数据库中列ename列定义改变时,数 据库运行时自动修改.
%ROWTYPE:
行类型
《PL/SQL程序设计》
11
PL/SQL程序设计
PL/SQL基础
PL/SQL 的记录类型 把逻辑相关的数据作为一个单元存储起来,在
Declare 段中定义reco来自d类型数据,使某一✓ BINARY_INTEGER
可存储带符号整数,为整数计算优化性能
✓ DEC
NUMBER的子类型,存储实型数据
✓ DOUBLE PRECISION
NUMBER的子类型,高精度实数
✓ INTEGER NUMBER的子类型,整数
✓ INT
NUMBER的子类型,整数
PL/SQL数据类型扩展
数字型

创建--清华大学计算中心ORACLE培训资料

创建--清华大学计算中心ORACLE培训资料

Oracle9i PFILE文件格式 PFILE文件格式
# Resource Manager RESOURCE_MANAGER_PLAN=SYSTEM_PLAN # Sort, Hash Joins, Bitmap Indexes SORT_AREA_SIZE=524288 # System Managed Undo and Rollback Segments UNDO_MANAGEMENT=AUTO UNDO_TABLESPACE=undotbs
E_mail:tengyc@
Oracle9i PFILE文件格式 PFILE文件格式
# Cache and I/O DB_BLOCK_SIZE=4096 DB_CACHE_SIZE=20971520 # Cursors and Library Cache CURSOR_SHARING=SIMILAR OPEN_CURSORS=300 # Diagnostics and Statistics BACKGROUND_DUMP_DEST=/vobs/oracle/admin/mynewdb/bdump CORE_DUMP_DEST=/vobs/oracle/admin/mynewdb/cdump TIMED_STATISTICS=TRUE USER_DUMP_DEST=/vobs/oracle/admin/mynewdb/udump # Control File Configuration CONTROL_FILES=("/vobs/oracle/oradata/mynewdb/control01.ctl", "/vobs/oracle/oradata/mynewdb/control02.ctl", "/vobs/oracle/oradata/mynewdb/control03.ctl")

LOB--清华大学计算中心ORACLE培训资料


LOB使用举例
SQL>CREATE TABLE Employee( name VARCHAR2(50), birth_date DATE, id_code NUMBER(7), resume CLOB, photo BLOB) LOB (resume,photo) STORE AS (TABLESPACE lob_data STORAGE (INITIAL 1m NEXT 1m PCTINCREASE 50 ) CHUNK 2048 NOCACHE );
DIRECTORY创建方法
操作系统创建相应的物理路径。 用户应具有CREATE ANY DIRECTORY权限。 使用CREATE DIRECTORY 命令创建目录与 物理路径连接。 为使用该目录的用户授予READ ON DIRECTORY权限。

tengyc@
BFILE使用举例

使用外部文件BFILE概念:



BFILE用于存储外部文件、将文件存储与操作系 统目录。 BFILE更新必须依赖于操作系统。 使用BFILE时,必须预先建立DIRECTORY目录。 用户通过DIRECTORY存取外部文件。 需要相应的存取DIRECTORY的权限。
tengyc@
LOB使用举例
CHUNK参数设置:

CHUNK的尺寸决定访问LOB数据时一次读取数 据量 。 以大数据量读写LOB列时,可以给大的CHUNK。 CHUNK取值方法: A.小于等于Next B.DB_BLOCK_SIZE的倍数 C.缺省值:2k
LOB使用举例
CACHE设置
可以设置CACHE、NOCACHE 如果经常访问LOB列数据,可以考虑设置 CACHE。 缺省为NOCACHE。

ORACLE学习笔记_第一讲_存储过程入门

第一讲存储过程入门1、内容:(1)定义函数、定义过程的基本语法①函数/过程头部分:名称、参数和返回值类型;②声明部分:变量声明;③执行部分;④异常处理部分。

(2)变量①定义变量的基本语法;②变量类型:标量(scalar)数据类型<number、character、data/time、boolean>③变量的赋值;④变量的使用。

(3)操作符的使用①算术操作符:+(加)、-(减)、*(乘)、/(除)、**(乘方)②关系操作符:>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、=(等于)、!=(不等于)、<>(不等于)、:=(赋值操作符)③比较操作符:IS NULL、LIKE、BETWEEN、IN④逻辑操作符:AND、OR、NOT(4)游标的基本使用方法①游标的定义②游标的打开③循环获取游标行记录④游标的关闭(5)函数的调用(6)通过PL-SQL编写、调试函数和过程2、应用举例(1)准备在数据库中建表,表名为student,字段内容如下:(2)函数createNumber--定义函数,作用:获取student表中no字段的最大值,将student表中no为0的记录其no字段的值从当前最--大的no值开始,依次+1进行更新create or replace function cr eateNumber--返回值类型return integer--定义变量is--定义number类型的变量num_max number;--定义变量,变量类型根据表student中的cuid来定,这两个变量在函数中没有用,只是--作为知识点介绍s_cuid student.cuid%type;s_no student.no%type;--定义游标,且向游标传递参数,参数的定义方法和普通参数的定义方法相同cursor student_line(no_value student.no%type) is select cuid,no from student where no =no_value;--定义游标行变量,即变量类型为游标行对象stu_row student_line%rowtype;begin--通过sql给变量num_ma x赋值select max(no) into num_ma x from student;--输出变量num_maxdbms_output.put_line(num_max);--传递参数,打开游标open student_line(0);--循环获取游标行记录loop--获取游标行记录fetch student_line into stu_row;--直至游标走到结束位置才退出循环exit when student_line%notfound;--num_max自增num_max:=num_max+1;--输出调试信息dbms_output.put_line('now studentinfo:'||'s_cuid='||stu_row.cuid||',s_no='||stu_row.no||'*****num_max='||num_max); --执行表更新操作update student set no=num_max where cuid=stu_row.cuid;--结束循环end loop;--关闭游标close student_line;--返回结果return 0;end createNumber;(3)函数test--循环往表student中插入一些测试记录create or replace function test(flag in number)--说明返回值类型return int--开始定义变量is--定义int类型变量num int;begin--变量赋值num:=flag;--开始循环loopnum:=num+1;--选择语句if (num>50) thenexit;elseinsert into student(cuid,name,no,remark) values(num,'zhuyong',0,'待更新');end if;--结束循环end loop;--返回值return num;end;(4)调用的存储过程--调用函数test和createNumber的存储过程create or replace procedure testx--开始定义变量isc number;begin--调用test函数c:=test(5);--输出test函数执行结果dbms_output.put_line(c);--调用createnumber函数c:=createnumber;--输出createnumber函数的调用结果dbms_output.put_line(c);end testx;(5)测试代码和方法在PL-SQL中选中存储过程名称,右键菜单中选择“test”项,即可进行调试。

用户--清华大学计算中心ORACLE培训资料


创建用户
CREATE USER username IDENTIFIED BY password DEFAULT TABLESPACE tablespace TEMPORARY TABLESPACE tablespace
PROFILE profile
QUOTA
interger
UNLIMITED
ON tablespace
数据库用户安全管理
安全参数
缺省表空间(Default Tablespace) 缺省表空间 在创建实体时,如没有指明表空间,那么实体在缺省表空间中创建. 在创建实体时,如没有指明表空间,那么实体在缺省表空间中创建. 临时表空间(Temporary Tablespace) 临时表空间 为有要求磁盘空间作排序或数据汇总的SQL语句提供存储空间. 语句提供存储空间. 为有要求磁盘空间作排序或数据汇总的 语句提供存储空间 表空间限额(Tablespace Quotas) 表空间限额 最大尺寸. 决定用户在每个表空间中可以使用的 最大尺寸. 系统资源限制(System Resource Limit) 系统资源限制 包括CPU时间,逻辑读个数,每个用户同时可连接对话个数,一个 时间, 包括 时间 逻辑读个数,每个用户同时可连接对话个数, 对话的空闲时间.通过Profile文件指明. 文件指明. 对话的空闲时间.通过 文件指明
超级用户
修改数据库运行模式 完成数据库的备份与恢复 修改数据库的结构 创建用户,权限管理等 创建用户,
SYS
数据库管理员
具有DBA角色的用户,可以执 角色的用户, 具有 角色的用户 行数据库内户
可以进行数据库开发,创建任何实体, 可以进行数据库开发,创建任何实体,不具有 修改数据库结构的权限

启动--清华大学计算中心ORACLE培训资料


启动监听进程Listener 启动监听进程
$lsnrctl start TNSLSNR for Solaris: Version 9.0.1.1.1 - Production on 06-OCT-2001 12:27:54 Copyright (c) 1991, 2001, Oracle Corporation. All rights reserved. Starting tnslsnr: please wait… TNSLSNR for Solaris: Version 9.0.1.1.1 - Production System parameter file is /home2/app/oracle/product/9.0.1/network/admin/listener.ora Log messages written to /home2/app/oracle/product/9.0.1/network/log/listener.log Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sun4500)(PORT=1521)))
Oracle9i数据库启动Fra bibliotek求 数据库启动要求
Oracle9i引入了服务器参数文件spfile的概念,在数据 库启动时,系统缺省使用spfile参数启动数据库. 如果没有spfile参数文件,则使用pfile启动数据库. 如果两个文件同时存在,则系统优先使用spfile. 如果没有spfile,pfile则出现错误.
(c) Copyright 2001 Oracle Corporation. All rights reserved. SQL> connect sys/manager as sysdba Connected. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL>
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9
创建包(Create Package)
Create or Replace Package 包名 IS AS

Procedure 过程名();

Function 函数名() Return 数据类型;

变量定义;

例外定义;

光标定义;

……;
End 包名;
10
创建包体(Create Package Body)
end if;

Exception
在Exception段中使用
When NO_DATA_FOUND
THEN …
When CURSOR_ALREADY_OPEN THEN

When TOO_MANY_ROWS
THEN ...

When out_of_range
THEN ...
段 END;
8
Package 包的设计
17
数据库触发器与存储过程比较:
✓ 数据库触发器是在进行数据操纵时自动触发的, 存储过程要通过程序调用。
✓ 在数据库触发器中可以调用存储过程、函数。 ✓ 在触发器中禁止使用COMMIT 、ROLLBACK语句,
存储过程中可以使用PL/SQL中可以使用的全部SQL 语句。 ✓ 在触发器中不得间接调用含有COMMIT、ROLLBACK语
21
每一个成功者都有一个开始。勇于开始,才能找到成
After
Delete
On 表名
Update {of}
FOR EACH ROW
Declare ……. Begin …… End;
PL/SQL块
20
创建行级触发器:
✓ 当触发器已经存在时,使用Replace选项。 ✓ Update中的of是可选项,用于指定Update语句要修改的 ✓ 根据进行一个操作时触发器的触发次数决定是用语句级 ✓ 当某一操作结果只影响一行时,语句级触发器与行触发
THEN ...

When
OTHERS
THEN ...
END;
7
存储过程例外处理(EXCEPTION)
1. 用户定义例外的使用
Declare
在Declare段定义
out_of_range EXCEPTION;
Begin
… if v_sal >MAX_SAL then
RAISE
在Begin段中引起
out_of_range;
Create or Replace Package Body 包名
IS AS
Procedure 过程定义; Procedure 过程定义; Function 函数定义; Function 函数定义;
……; End 包名;
11
创建包
12
创建包体
1
----定义过程
13
创建包体
2 3
----定义过程
end if;
End;
6
存储过程例外处理(EXCEPTION)
1. 例外的使用
Declare
在Exception段中 对返回信息一一作出响应
Begin
Exception
When NO_DATA_FOUND
THEN …

When CURSOR_ALREADY_OPEN THEN

When TOO_MANY_ROWS …
18
创建语句级触发器
SQL> Create or Replace Trigger 触发器名
Before Insert
After
Delete
On 表名
Update {of}
Declare ……. Begin …… End;
PL/SQL块
19
创建行级触发器
SQL> Create or Replace Trigger 触发器名 Before Insert
《Oracle9i PL/SQL》
存储过程、包、数据库触发器设计
(Oracle9i Procedural Option)
1
存储过程与应用级存储过程的区别
Storage Procedure
1.存储于数据库中 2.文档存储在数据字典 3.可以被应用、及开发
工具调用 4.可以被其他存储过程
调用
Form Procedure
14
包的调用
15
Oracle Database Trigger 数据库触发器设计
16
数据库触发器作用
防止非法的数据库操纵、维护数据库安全 对数据库的操作进行审计,存储历史数据 完成数据库初始化处理 控制数据库的数据完整性 进行相关数据的修改 完成数据复制 自动完成数据库统计计算 限制数据库操作的时间、权限等,控制实体的安全性
ZERO_DIVIDE
INVALID_CURSOR
✓ 用户自定义例外
用户定义的例外必须在DECLARE段中说明,在Begin段中用RAISE引 起,
5
存储过程例外处理(EXCEPTION)
✓ SQL语句执行结果:
在处理SQL时,这类消息所使用的SQL语句包括: INSERT ,UPDATE,DELETE子句。
3
创建函数(Create Function)
Create or Replace Function 函数名(变量
IN OUT
数据类型)
Return 数据类型ISIN OUTAS
缺省
变量定义;
Begin

Return 值;
可以省略
End 函数名;
4
存储过程例外处理(EXCEPTION)
✓ 在PL/SQL中,警告信息、出错信息、或返回信息统称为例外(Exception)。O
预定义的例外: 是由PL/SQL运行过程中,系统自动产生的信息。
用户自定义例外: 是用户根据需要,自己定义使用的例外,执行时 由用户自己引起。
✓ Oracle预定义的常用例外:
CURSOR_ALREADY_OPEN VALUE_ERROR
NO_DATA_FOUND
INVALID_NUMBER
TOO_MANY_ROWS
1.存储于Form应用中 2.文档可以从应用中得到 3.只可以由Form调用
4.可以调用存储过程
2
创建存储过程(Create Procedure)
Create or Replace Procedure
过程名(变量
IN OUT
数据类型)
IN OUT IS
AS
缺省
变量定义;
Begin
过…


可以省略
End 过程名;
✓ 执行结果属性:
SQL%FOUND SQL%NOTFOUND
SQL%ROWCOUNT
✓ 例外处理方法:
Begin
update emp
set sal=1200 where empno=1234;
if SQL%NOTFOUND then insert into Errors(empno,sal)
values(1234,1200);
相关文档
最新文档