- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Oracle存儲过程总结(基本应用)
建立存储过程或函数
存储过程或函数是存储ORACLE数据库中的PL/SQL程序,可由用户直接或间接调用。使用存储过程和函数主要优越性是:
1、提高了效:在客户/服务器体系结构中,客户机应用向数据库服务器提出对SQL的需求。随着用户数量的增加,SQL 请求也就不断地增加,使网络很快就成为运行的瓶颈。使用存储过程可使运行性能得到显著的改进,因为对储过程的一个调用,即调用了在服务器中执行的多个SQL语句,从而减少了网络的拥挤。
2、可重用性:一个PL/SQL程序只需编写一次,即可用于各种地方.
3、可移植性:可在任何ORACLE数据库中使用存储过程,而不用考虑平台问题。
4、可维护性:一个存储过程用于完成一个特定的任务,如数据库触发器等需要调用该过程的地方均调用同一个存储过程,这样可降低软件维护的成本。
一、 存储过程
1、 建立存储过程的语法。
CREATE [OR REPLACE] PROCEDURE 程储过程名
[(参数1,……参加n)] IS
[局部变量声明部分]
BEGIN
可执行部分
[例外处理部分]
END;
说明:OR REPLACE 选项是当此存储过程存在时覆盖此程储过程。
参数部分和过程定义的语法相同。
例:定义一个存储过程用于删除students表中按学号指定的学生记录。
CREATE OR REPLACE PROCEDURE DELE
(STUID VARCHAR2) IS
BEGIN
DELETE FROM STUDENTS
WHERE STU_ID =STUID;
END;
2、 调用存储过程
方法: EXECUTE 存储过程名(参数1,参数n);
说明:参数1到参数n的类型与存储过程定义的类型必须一致,且参数的个数必须相同。
例:调用DELE存储过程删除学号为1的学生记录。
EXECUTE DELE(‘1’);
例:建立一个存储过程,在emp表中给按雇员号指定的人员增加工资,如果工资大于2000则增加50,否则如果工资大于1000则增加100,否则增加150。
CREATE OR REPLACE PROCEDURE ADDSAL
(EMPLOYNO EMP.EMPNO%TYPE) IS
INCREMENT NUMBER;
SALARY EMP.SAL%TYPE;
BEGIN
SELECT SAL INTO SALARY FROM EMP
WHERE EMPNO=EMPLOYNO;
IF SALARY=2000 THEN
INCREMENT:=50;
ELSIF SALARY=1000 THEN
INCREMENT:=100;
ELSE
INCREMENT:=150;
END IF;
UPDATE EMP
SET SAL=SAL+INCREMENT
WHERE EMPNO=EMPLOYNO;
END;
调用此存储过程,给雇员号为7369的记录增加相应的工资。
Execute addsal(‘7369’);
二、 存储函数
1、 语法
CREATE [OR REPLACE] FUNCTION 函数名
[参数1,……参数n]
RETURN 函数数据类型 IS
[ 局部变量说明]
BEGIN
可执行部分
[例外处理部分]
RETURN 函数的值
END;
说明:函数数据类型是函数返回值的数据类型;
函数的值是返回给调用程序的数值。
例:建立一个存储函数,统计指定部门的人数。
CREATE OR REPLACE FUNCTION COUNTNUM (DEPNO NUMBER) RETURN NUMBER IS
SUMA NUMBER;
BEGIN
SELECT COUNT(*) INTO SUMA FROM EMP WHERE DEPTNO=DEPNO
RETURN SUMA;
END;
调用此函数时注意不能把函数单独的写成一行。可写在PL/SQL赋值语句的右端。或写在SELECT语句中等等。
例:写一PL/SQL块统计10号部门和30号部门人数之和。
Declare
A number;
Begin
A:=countnum(10)+countnum(30);
Dbms_output.put_line(a);
End;
例:建立一个存储过程,将STUDENTS表中按学号指定的学生记录移至HISTORY表中。并在history表中增加移入日期 (删除STUDENTS表中的记录,同时录入到HISTORY表中)。
Create or replace procedure move( stuno varchar) is
Begin
/*将students中学号为stuno的记录插入到history表中*/
Insert into history(stu_id,name,sex,lda
文档评论(0)