一、什么是存储过程?
        在Oracle数据库中,可以将一些固定的操作集中起来由Oracle数据库服务器来完成,以实现某个任务,这就是存储过程。
二、存储过程有什么优点?
        1、简化复杂操作;
        2、增加数据独立性;
        3、提高安全性;
        4、实现表字段完整性;
三、存储过程的参数
    1、存储过程的参数有三种:in(输入类型)  参数,out(输出类型)参数,in out(输入、输出类型)参数。在过程中可以定义参数,在调用该过程时,可以向过程传递实际参数。如果没有参数,则过程名后面的圆括号和参数可以省略。参数定义形式如下:
                                参数名(参数定义)      参数传递模式        参数数据类型:=默认值
                                        flag                            in out                    number:=0
    2、三种参数传递模式比较:
                                                      in                                                out                                           in  out
               是否默认                      默认                                     必须明确指定                                 必须明确指定
               参数的传递方向          从调用者到过程                   从过程到调用者                                两个方向
               形式参数的作用          一个常量                              没有初始化的变量                             经过初始化的变量
               实际参数的形式          常量、表达式、变量           必须是一个变量                                 必须是一个变量
        参数默认值的作用是在调用过程时,如果没有提供实际的参数,则将此默认值作为实际的参数传递给过程。数据类型用来指定参数的类型,在参数定义中不能指定参数的约束条件,即不能指定参数的长度和是否为空 等属性。
四、存储过程中参数的赋值:
    declare   变量名:=变量值
    declare    flag:=0;
五、存储过程的创建:
    在PL/SQL语句中,可以使用create or replace procedure命令创建用户自定义的存储过程。存储过程包括无参存储过程以及有各种参数的存储过程,形式如下:
       create or replace procedure  pro_test/pro_test(参数1,参数2,...) as    
      begin
      存储过程定义
      end     pro_test;
六、执行存储过程:
    1、执行无参数的存储过程:
        begin
        存储过程名;
        end ;
    2、执行带有in参数的存储过程:
        begin
        存储过程名(in参数1,in参数2,...);
        end;
    3、执行带有in,out参数的存储过程:
         declare count1 number;//out参数1

     count2 number;//out参数2
begin
pro_admin_inse(in参数1,in参数2,...,count1,count2,...);//执行存储过程
dbms_output.put_line(count1||count2||...);//输出out参数
end;
    4、执行带哟偶in out参数的存储过程:
        declare flag1 number:=2;
     flag2 number:=3;
begin
exch(flag1,flag2);
dbms_output.put_line(flag1||flag2);
end; 
七、查询存储过程:
        select * from user_objects where object_name=upper('pro_send');
select * from user_source where name=upper('pro_send'); //查询存储过程的详细信息
select * from user_errors where name=upper('pro_send');//查询存储过程的错误信息 
八、删除存储过程:
        drop  procedure  存储过程名或者直接从PL/SQL中删除。
九、存储过程示例:
    1、用存储过程输出“Hello world!”
create or replace procedure  pro_send as
begin
dbms_output.put_line("Hello world!");
end pro_send;
2、更新某张表的某个字段的值:
create or replace procedure  pro_edit as
begin
update table_name t set t.name="唐飞" where t.id="1";
end pro_edit;
3、向某张表中根据条件插入数据(只有in参数):
create or replace procedure pro_admin_inse(ire_cityId in varchar2,ire_cityName in varchar2) as
begin
declare max_ire_id number;
    begin
    if(ire_cityName is null or length(ire_cityName) = 0) then
    return;
    end if;
    if(ire_cityId != 888) then
    return;
    end if;
    select max(i.id) into max_ire_id from IRE_CITY i;
    insert into IRE_CITY(id,city_id,city_name) values(max_ire_id+1,ire_cityId,ire_cityName);
    end;
end pro_admin_inse;
4、利用if...else语句更新表中的数据:
create or replace procedure pro_ire_city(ire_id in number:=11,ire_cityName in varchar2) as
begin
    if ire_id = 11 then 
        update IRE_CITY set city_id = city_id + ire_id;
    else
update IRE_CITY set city_id = city_id + ire_id where city_name = ire_cityName;
    end if;
end pro_ire_city;
5、向某张表中根据条件插入数据(有in和out参数):
create or replace procedure pro_admin_inse(ire_cityId in varchar2,ire_cityName in varchar2,ire_count1 out number,ire_count2 out     number) as
begin
declare max_ire_id number;
    begin
    if(ire_cityName is null or length(ire_cityName) = 0) then
        return;
    end if;
    if(ire_cityId != 888) then
return;
    end if;
    select count(*) into ire_count1 from IRE_CITY;
    select max(i.id) into max_ire_id from IRE_CITY i;
    insert into IRE_CITY(id,city_id,city_name) values(max_ire_id+1,ire_cityId,ire_cityName);
    select count(*) into ire_count2 from IRE_CITY;
    end;
end pro_admin_inse;
6、把in out参数的两个值互换值
create or replace procedure exch(flag1 in out number,flag2 in out number) as
begin
    flag1 := flag1 + flag2;
    flag2 := flag1 - flag2;
    flag1 := flag1 - flag2;
end; 

PL/SQL之存储过程相关推荐

  1. Oracle如何使用PL/SQL调试存储过程

    Oracle如何使用PL/SQL调试存储过程 PL/SQL中提供了[调试存储过程]的功能,可以完成存储过程的预编译与测试. 点击要调试的存储过程,右键选择TEST 如果需要查看变量,当然调试都需要.在 ...

  2. PL/SQL中存储过程int和out的用法

    PL/SQL中存储过程int和out的用法 一 介绍 过程和函数中的in和out (1)一般来讲,过程和函数的区别在于函数可以有一个返回值:而过程没有返回值. (2)但过程和函数都可以通过out指定一 ...

  3. 【学亮IT手记】PL/SQL编程-存储过程

    存储过程实际上就是一种命名的PL/SQL程序块. 创建存储过程 创建存储过程需要使用procedure关键字. 创建存储过程不需要使用DECLARE关键字,转而使用CREATE/REPLACE关键字. ...

  4. PL/SQL调试存储过程

    如何调试oracle存储过程 PL/SQL中为我们提供了调试存储过程的功能,可以帮助你完成存储过程的预编译与测试. 点击要调试的存储过程,右键选择TEST 如果需要查看变量,当然调试都需要.在右键菜单 ...

  5. PL/SQL编程-存储过程

    概念: 存储过程,简称"存储"或者"存过",是一种命名的PL/SQL程序块,也是工作中用到最多的命名块,数据库中的大多数程序都是以存储过程的形式存放在数据库里. ...

  6. pl/sql的存储过程

    1.存储过程的用途和使用场景 一般的sql语句每执行一次就编译一次,而存储过程只在创造时编译,以后每次执行存储过程都不需要再重新编译,所以使用存储过程可提高数据库执行速度. 当对数据库进行复杂操作时( ...

  7. [PL/SQL]使用存储过程实现导出指定数据到文件(仿EXP)|转|

    源自 crkying:http://blog.csdn.net/edcvf3/article/details/8633247 由于EXP不能导出表的指定字段(其实也可通过CREATE TABLE  t ...

  8. 百倍性能的PL/SQL优化案例(r11笔记第13天)

    我相信你是被百倍性能的字样吸引了,不过我所想侧重的是优化的思路,这个比优化技巧更重要,而结果嘛,其实我不希望说成是百倍提升,""自黑""一下. 有一个真实想法和 ...

  9. 金仓数据库KingbaseES 迁移工具—PL/SQL中Oracle和KingbaseES 的对比

    关键字: KingbaseES.PL/SQL.存储过程.函数 一.PL/SQL语言兼容特性 在 PL/SQL 语言方面,KingbaseES 提供了大量的Oracle 兼容特性.这些特性使得大多数的 ...

最新文章

  1. go语言 mysql卡死,Go语言MySQL优化
  2. python strip函数用法_python strip()函数 介绍
  3. Puppet SaltStack Chef Ansible
  4. 【C++编程题2】字符串插入空格
  5. python http 返回json中文乱码
  6. (0.2)linux下Mysql的安装配置与管理入门(目录篇)
  7. k8s配置以使得pod可以运行于master上
  8. WebServices中的SOAP究竟是什么东西?与http,xml,webservices的本质关系是什么?
  9. openwrt顶层Makefile分析-转
  10. CoffeeScript学习(3)—— 函数
  11. 免费录屏、直播推流软件之OBS Studio
  12. Xshell使用方法
  13. MTK.SP Flash Tool v6.2208 联发科V6版本 线刷工具教程下载
  14. CAD命令输入、结束、重复、撤销
  15. 谁是赢家,某电视台的娱乐节目有个表演评审环节,每次安排两位艺人表演,他们的胜负由观众投票和 3 名评委投票两部分共同决定。规则为:如果一艺人的观众票数高,且得到至少 1 名评委的认可,该艺人就胜出;
  16. c#中Debug和Release的区别实验
  17. 系统性谈谈软件可靠性——第4讲:软件可靠性测试
  18. 我的世界java百度什么电脑玩好_【我的世界】为了在龙芯电脑上玩Minecraft(我的世界)我做了什么_玩得好游戏攻略...
  19. 我是如何拿到:百度 腾讯 头条 美团 度小满等互联网offer的?
  20. ajax瀑布流插件,jQuery瀑布流无限加载插件:jquery.falless.js

热门文章

  1. HTML背景图片显示不出来/实现为file按钮设置背景
  2. filter() 函数的用法
  3. 陈冠希翻车都十年了,还有人在疯狂偷窥你的照片
  4. 硬科技,创未来!第十五届深创赛福田预选赛-华秋第九届硬创大赛正式启幕
  5. python基础--列表常用方法
  6. OKEx上线OKB C2C借贷服务,借取灵活资金,A股、币圈两不误
  7. 字符串排序:oj Problem C: 国家排序
  8. oracle 当前top sql,Oracle top 查询TOP SQL
  9. 自学Vue时我曾经出过错的地方(一)
  10. 虽迟但到的复盘,再见了我的2022