oracle存储过程创建-调试-调用-删除(一)

摘要:
存储过程是一组用于完成特定功能的SQL语句。用户通过指定存储过程的名称并给出参数(如果存储过程有参数)来执行存储过程。Oracle的存储过程由三部分组成:接下来,让我们讨论存储过程的语法存储过程create:存储过程表示创建了存储过程pro _名称:当存储过程使用参数编写参数时,必须指定参数的数据类型。

存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

优点:效率高,复用性强,安全性高

存储过程的结构:oracle的存储过程包含三部分:过程声明,执行过程部分,存储过程异常(可省略)。

接下来我们来详细讲述一下存储过程

存储过程的语法

create:创建 关键字

or replace: 如果此名称的存储过程已经创建了,那么用这两个关键字可以替换同名的存储过程,不用会报错,可以省略。

procedure:存储过程  意思是创建的是一个存储过程

pro_name: 存储过程的名称。

(参数): 存储过程的参数,可以省略,有参的存储过程在写参数的时候要指定参数的数据类型。

as: 也可以写成is。

plsql_sentences: pl/sql语句,他是存储过程功能实现的主体。

dowith_sentences: 异常处理语句,也是pl/sql语句,可以省略。

1 create [or replace] procedure pro_name (参数) as
2 begin
3     plsql_sentences;
4 [exception]
5     [dowith_sentences;]
6 end pro_name;

存储过程的学习

存储过程的创建(pl/sql)

首先打开plsql软件,在左侧找到procedures文件夹,里面的就是你的存储过程,在上面右键--新建--输入存储过程的名字和参数(名字在里面也可以改,参数可以暂时不管)

oracle存储过程创建-调试-调用-删除(一)第1张

 oracle存储过程创建-调试-调用-删除(一)第2张

无参存储过程

上面的介绍对于一些初学者可能不那么好理解,那么我们先用一个例子来让大家认识一下存储过程。

首先我们在oracle中创建一个表(表名T_USER)表结构如下

oracle存储过程创建-调试-调用-删除(一)第3张

例子:写一个无参存储过程,向t_user表中添加一条数据。

1 create or replace procedure test1 as
2 begin
3   insert into t_user values('1','张三',22,1,'13718770909',sysdate);
4   commit;
5 end test1;

要注意:test1为存储过程的名字,commit意思是提交事务,end后面跟的一定是存储过程的名字。

有参存储过程

那么通过上面的例子我们就基本知道了无参存储过程的大概。那么接下来让我们看看有参存储过程是怎么写的。

首先我们先介绍一下存储过程的参数

存储过程可以接受多个参数,参数模式包括三种:

in:输入类型 默认 不可修改 可以省略

out:输出类型 只能等待被赋值  不可省略

in out:兼顾上面两种 不可省略 不建议使用这种,如果遇到这种情况,完全可以拆开成两个参数

例子:写一个有参的存储过程,向t_user表中添加一条数据。要求插入的数据都要用参数传递过来的数据。

1 create or replace procedure test2(id varchar2,name varchar2,age number,sex number,tel varchar2,create_time date) is
2 begin
3   insert into t_user values (id,name,age,sex,tel,create_time);
4   commit;
5 end test2;

要注意:test2为存储过程的名称,每个参数要表明类型,但是不能指定长度,参数的名称可以随便起。

存储过程的检查

一个存储过程在创建之后,需要我们验证一下语法是否正确,方法是点击下图的执行按钮(齿轮) 如果最下面出现了编译成功,那么说明此存储过程语法上没有问题。如果有报错,就根据提示信息进行修改即可。

oracle存储过程创建-调试-调用-删除(一)第4张

存储过程的调用

写好的存储过程,在oracle中怎么调用呢?

首先打开一个sql操作页面(文件--新建-sql窗口),根据我们所写的存储过程的参数,可以使用call关键字进行调用

比如上面两个例子(test1,test2),他们的调用方法分别为

1 --无参调用方法
2 call test1()
3 --有参调用方法
4 call test2('11','张三',11,0,'13567667897',sysdate)

存储过程的删除

当一个存储过程不再被需要的时候,要将此过程从内存中删除,以释放相应的内存空间,方法一共有两种

1. 语句删除L:drop procedure test1 //test1是存储过程的名称

2. 使用pl/sql工具,直接在左侧的procedures文件夹中找到那个存储过程文件,右键删除即可。

存储过程的调试

在左侧的procedures文件夹中找到你要调试的存储过程文件,右键选择测试,之后按下图操作

 oracle存储过程创建-调试-调用-删除(一)第5张

上面的红框中的五个按钮 从左到右分别为:运行,单步进入(重要),单步跳过,单步退出,运行到下一个异常,一般我们只用到单步进入就可以了。

操作顺序为:点击运行按钮,之后一步步点击单步进入按钮即可。

 oracle存储过程创建-调试-调用-删除(一)第6张

特别注意:我们在存储过程中可以写dbms_output.put_line('ok'); 括号中的ok为参数  类似于java里的System.out.println("ok"); 可以在DBMS输出中看到

oracle存储过程创建-调试-调用-删除(一)第7张

接下来会继续更新存储过程中的一些其他的知识及技巧和用法。

  

  

免责声明:文章转载自《oracle存储过程创建-调试-调用-删除(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇4G EPS 中的 User Plane尚硅谷《谷粒商城项目总结》下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

美多商城项目之商品模块

1. FastDFS和Docker      1.0 为什么要使用FastDFS和Docker?         因为商品数据分为了商品图片数据(文件),还有商品信息数据(字符串:商品名称,价格,...)        商品图片数据(文件)需要使用单独的文件存储服务器进行管理            文件存储服务器:FastDFS            如何...

iOS学习笔记(5)形参个数可变的方法

  如果在定义方法时,在最后一个形参明后增加逗号和三点(,...),则表明该形参可以接受多个参数值。   为了在程序中获取个数可变的形参,需要使用如下关键字    · va_list:这是一个类型,用于定义指向可变参数列表的指针变量    · va_start:这是一个函数,该函数指定开始处理可变形参的列表,并让指针变量指向可变形参列表的第一个参数    ...

shell学习(16)- 压缩和解压缩命令tar和zip

tar命令 [root@Linux ~]# tar [-cxtzjvfpPN] 文件与目录 .... 参数: -c :建立一个压缩文件的参数指令(create 的意思); -x :解开一个压缩文件的参数指令! -t :查看 tarfile 里面的文件! 特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在! 因为不可能同时压缩与解压缩。 -z...

[转]C++中的自动存储、静态存储和动态存储

根据用于分配内存的方法,C++中有3中管理数据内存的方式:自动存储、静态存储和动态存储(有时也叫做自由存储空间或堆)。在存在是间的长短方面,以这三种方式分配的数据对象各不相同。下面简要介绍这三种类型(注:C++11中新增了第四种类型——线程存储) 1.自动存储 在函数内部定义的常规变量使用自动存储空间,被称为自动变量(automatic variable)...

C#中SetWindowPos函数详解

[DllImport("user32.dll")] private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndlnsertAfter, int X, int Y, int cx, int cy, uint Flags); SetWindowPos...

从js向Action传中文参数出现乱码问题的解决方法

Action获取jsp表单中的中文参数,只要整个项目都采用UTF-8编码格式都不会出现乱码问题;但JSP中用到JS,并从JS向Action传中文参数,就会出现中文乱的现象     做项目的时候,发现Action获取jsp表单中的中文参数,只要整个项目都采用UTF-8编码格式都不会出现乱码问题;但JSP中用到JS,并从JS向Action传中文参数,就会出现中...