如何使用不带参数的存储过程和带参数的存储过程?「终于解决」

如何使用不带参数的存储过程和带参数的存储过程?「终于解决」1、存储过程创建 存储过程是执行一系列PL/SQL 操作的子程序。从根本上讲,存储过程就是命名的PL/SQL程序块,他可以拥有参数,存储过程编译

欢迎大家来到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

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信