欢迎大家来到IT世界,在知识的湖畔探索吧!
1、存储过程创建
存储过程是执行一系列PL/SQL 操作的子程序。从根本上讲,存储过程就是命名的PL/SQL程序块,他可以拥有参数,存储过程编译后存储在教据库中,然后由应用程序或者其他的PL/SQL块调用。创建存储过程的语法是:
创建存储过程的语法
CREATE [OR REPLACE] PROCEDURE 过程名[(过程参数列表)] ①
{ls丨As} ②
–声明部分 ③
BEGIN
–可执行部分
[EXCEPTION]
–异常处理部分
END [过程名];④
说明
(1) ORREPLACE 是可选的,表示如果当前用户下已经有同名的存储过程名,则覆盖旧的存储过程。过程名后面括号中是存储过程的参数,过程的参数可有可无,如果过程存在参数,参数列表必须有小括号括起来。如果过程没有参数,不能有小括号。
② ls 或AS 标志着PL/SQL块开始,IS和AS 是等价的。在存储过程中没有关键字DECLARERE。
③ 如果存储过程中需要本地变重、常量等声明部分,可以崔这里声明,方法与叫SQL块中声明变的方法相同。
④ 为了便于阅读交流和良好的编程风格,建议在END 后面加上过程名。
没有人生来伟大,没有人生来擅长编程。敢于挑战自己,是实现梦想的第一步!分享来自兆隆IT云学院,QQ:598756835
★★★ 不带参数的存储过程
案例:EMP 表中负工ALLEN 在入职时劳动合同条款是每半年工资提升5%。为调用方便,请编写存储过程实现该操作。
代码演示:创建不带参数的存储过程。
CREATE OR REPLACE PROCEDURE Displaysal
IS
newsal emp.sal %TYPE:
oldsal emp.sal %TYPE:
BEGIN
–保存原来的工资
SELECT sal INTO oldsal FROM emp WHERE ename=’ALLEN’;
–根据参数更新工资
UPDATE emp SET sal:sal+sal*0.05 WHERE ename=’ALLEN’;
–取得更新后的工资
SELECT sal INTO newsal FROM emp WHERE ename=’ALLEN’;
–输出工资
dbms-output.putline(’ALLEN 原来的工资是:’丨丨oldsal丨丨‘,更新后的工资是:’I Inewsal); EXCEPTION
WHEN no-data-found THEN
dbms-output.put-line (’查无此人!‘);
END Displaysal;
存储过程创建成功后,保存到 oracle服务器中,作为当前用户的数据库对象存在,存储过程可以在SQL*Plus 命令行下调用,也可以在其他PL/SQL 块中调用。在命令行下使用命令EXECUTE 命令调用过程,在其他PL/SQL 块中直接使用过程名即可调用。
代码演示:SQLPLUS 堤示符下调用存储过程
SQL> set serverout on
SQL> EXECUTE Displaysal ①
ALLEN 原来的工资是:1600,更新后的工资是:1680
PL/SQL procedure successfully completed
代码解析:
① 直接使用EXECUTE 命令执行存储过程,如果存储过程没有参数,调用时不带小括号。
代码演示:PL/SQL 块中调用存储过程
SQL> BEGIN
2 Displaysal; ①
3 END:
4 /
ALLEN 原来的工资是:1600,更新后的工资是:1680
PL/SQL procedure successfully completed
代码解析:
① PL/SQL 中直接使用存储过程名调用过程。
★★★ 带参数的存储过程
存储过程中一般需要使用参数来增强程序的灵活性。在上面案例中可以如下实现。
代码演示:带参数的过程
CREATE OR REPLACE PROCEDURE Updatesal(per NUMBER,var_empno NUMBER) ①
IS
en emp.ename%TYPE; –员工姓名
newsal emp.sal%TYPE;–更新后工资
oldsal emp.salo/OTYPE; –更新前工资
BEGIN
–保存原来的工资
SELECT sal INTO oldsal FROM emp WHERE empno=val_empno;
–根据参数更新工资
UPDATE emp SET sal=sal+sal*per WHERT empno=val_empno;
–取得王新后的工资
SELECT ename,sal INTO en,newsal FROM emp WHERE empno=val_empno;
–输出工资
dbms_output.put_line(en丨丨‘ 原来的工资是:丨丨oldsal丨丨’,更新后的工资是:’丨丨newsal); EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line(’查无此人!’);
END Updatesal;
代码解析:
① 存储过程中有两个参数。分别是员工姓名和工资增长率。这样就可以对任何员工作任何涨幅的操作了。子程序中的参数不需要规定参数的长度,比如(ename VARCHAR2]不需要指定VARCHAR2 的长度。
客户端调用带参数的存储过程时,参数要用小括号括起来,并且与存储过程中的参数一一对应。
代码演示:SQLPLUS 提示符下调用带参数的存储过程
SQL> EXECUTE UpdateSal(0.1,7499) ①
ALLEN原来的工资是:1600,更新后的工资是:1760
PL/SQL procedure successfully completed
没有人生来伟大,没有人生来擅长编程。敢于挑战自己,是实现梦想的第一步!分享来自兆隆IT云学院,QQ:598756835
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/12904.html