存储过程

.过程(存储过程)

存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块。但存储过程不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程是以命名的方式存储于数据库中的。

与过程相比,存储过程是存在数据库中的一个对象

如果编译错误。可以用show errors or show errors procedure myproc

 

.存储过程的优点:

1.存储过程和函数以命名的数据库对象形式存储于数据库当中。存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码。

2.存储过程和函数可由数据库提供安全保证,要想使用存储过程和函数,需要有存储过程和函数

的所有者的授权,只有被授权的用户或创建者本身才能执行存储过程或调用函数。

3.存储过程和函数的信息是写入数据字典的,所以存储过程可以看作是一个公用模块,用户编写的PL/SQL程序或其他存储过程都可以调用它(但存储过程和函数不能调用PL/SQL程序)一个重复使用的功能,可以设计成为存储过程,比如:显示一张工资统计表,可以设计成为存储过程;一个经常调用的计算,可以设计成为存储函数;根据雇员编号返回雇员的姓名,可以设计成存储函数。

4.像其他高级语言的过程和函数一样,可以传递参数给存储过程或函数,参数的传递也有多种方式。存储过程可以有返回值,也可以没有返回值,存储过程的返回值必须通过参数带回;函数有一定的数据类型,像其他的标准函数一样,我们可以通过对函数名的调用返回函数值。

存储过程和函数需要进行编译,以排除语法错误,只有编译通过才能调用。

现在定义一个简单的过程,就是打印一个数字

 

.(1)存储过程的建立及执行

创建存储过程,需要有CREATEPROCEDURECREATEANYPROCEDURE的系统权限。该

权限可由系统管理员授予。

过程的基本语句如下:

CREATE[ORREPLACE]PROCEDURE存储过程名[(参数[IN|OUT|INOUT]数据类型...)]

{AS|IS}

[说明部分]

BEGIN

可执行部分

[EXCEPTION 错误处理部分]

END[过程名];

 

(2)调用存储过程的方法

 1.EXECUTE模式名.存储过程名[(参数...)];

 2. BEGIN模式名.存储过程名[(参数...)];

   END;

 注意:存储过程只是一个行程过程,在编译成功后,要调用才可以看到效果。

 

其中:可选关键字ORREPLACE表示

CREATE OR REPLACE PROCEDURE myproc

AS

 iNUMBER ;

BEGIN

 i :=100 ;

 DBMS_OUTPUT.put_line('i = '||i) ;

END ;

/

执行过程: exec 过程名字

下面编写一个过程,要求,可以传入部门的编号,部门的名称,部门的位置,之后调用此

过程就可以完成部门的增加操作。

CREATE OR  REPLACE  PROCEDURE myproc(dno  dept.deptno%TYPE,name

dept.dname%TYPE,dl dept.loc%TYPE)

AS

 couNUMBER ;

BEGIN

 --  判断插入的部门编号是否存在,如果存在则不能插入

 SELECT COUNT(deptno) INTO cou FROM dept WHEREdeptno=dno ;

 IFcou=0 THEN

 --  可以增加新的部门

 INSERT INTO dept(deptno,dname,loc) VALUES(dno,name,dl) ;

                                                                                                                      

                                                                                                                                                                          

 DBMS_OUTPUT.put_line('部门插入成功!') ;

 ELSE

 DBMS_OUTPUT.put_line('部门已存在,无法插入!') ;

 ENDIF ; 

END ;

/

.带参数的存储过程

参数的作用是向存储过程传递数据,或从存储过程获得返回结果。正确的使用参数可以大大增加存储过程的灵活性和通用性。

参数的类型有三种,如下所示。

IN 定义一个输入参数变量,用于传递参数给存储过程

OUT 定义一个输出参数变量,用于从存储过程获取数据

INOUT 定义一个输入、输出参数变量,兼有以上两者的功能

参数的定义形式和作用如下:

参数名IN 数据类型DEFAULT

参数名OUT数据类型

参数名INOUT数据类型DEFAULT

 

IN OUT类型:

CREATE OR  REPLACE  PROCEDURE myproc(dno  IN  OUT dept.deptno%TYPE,name

dept.dname%TYPE,dl dept.loc%TYPE)

AS

 couNUMBER ;

BEGIN

 --  判断插入的部门编号是否存在,如果存在则不能插入

 SELECT COUNT(deptno) INTO cou FROM dept WHEREdeptno=dno ;

 IFcou=0 THEN

 --  可以增加新的部门

 INSERT INTO dept(deptno,dname,loc) VALUES(dno,name,dl) ;

 DBMS_OUTPUT.put_line('部门插入成功!') ;

 --  修改dno的值

  dno:= 1 ;

 ELSE

 DBMS_OUTPUT.put_line('部门已存在,无法插入!') ;

  dno:= -1 ;

 ENDIF ;

END ;

/

.删除存储过程

一个存储过程在不需要时可以删除。删除存储过程的人是过程的创建者或者拥有DROP ANY PROCEDURE系统权限的人。

删除存储过程的语法如下:

DROPPROCEDURE存储过程名;

阅读更多
上一篇用户权限
下一篇闪回
想对作者说点什么? 我来说一句

5个不同的系统中的存储过程

2010年04月22日 9KB 下载

存储过程循坏

2017年10月30日 714B 下载

sql存储过程的创建

2009年11月13日 482B 下载

破解存储过程破解存储过程

2009年02月17日 5KB 下载

存储过程存储过程存储过程

2011年04月07日 132KB 下载

调用存储过程(java)

2008年07月21日 2KB 下载

MSSQL存储过程基础

2008年10月28日 41KB 下载

存储过程db2存储过程

2009年07月05日 216KB 下载

没有更多推荐了,返回首页

关闭
关闭