全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Oracle中命名块之存储过程的详解及使用方法

一、匿名块和命名块

◆PL/SQL块分为良好总:命名块和匿名块。

◆匿名块:以declare或begin开始,每次执行匿名块都要通过客户端工具将其发送给Oracle,经过语法分析、编译然后执行。

◆命名块:具有名称的PL/SQL块,这些命名块被存储在Oracle中,编译一次,以后只可调用就可多次执行。如:存储过程、存储函数、包、触发器等、

  存储过程:无返回值;
  存储函数:有返回值;
  包:可容纳多个过程或函数的一个容器(较好管理这些过程和函数,类似于java中的包);
  触发器:在合适的实际被自动执行。(无需调用,在满足要求的情况下,自动执行;触发器也被称为隐式执行的命名块!)

◆匿名块和命名块的区别:

  匿名块:能够动态地创建和执行过程代码的PL/SQL结构,每次执行匿名块时就会自动的将该块数据通过文本的形式发送给Oracle,然后执行,反馈给用户,每次执行都需发送和编译!
  命名块:持久化的方式将代码作为数据库属性储存在系统目录中,在Oracle中编译一次,下次若使用可直接调用执行,无需再次编译,非常高效。

二、存储过程:

存储过程是具有名称、完整特定功能和无返回值的PL/SQL块,只需发送调用命令即可执行该过程,能够实现代码的重用,不能在SQL语句当中调用!

◆创建存储过程:

格式:create[or replace] procedure proc_name
     [(para1[int|out|in out]type,...)]
     {is|AS}
     prdc_body
 

  proc_name表示存储过程名;
  para1表示参数名;type是参数para1的数据类型;
  proc_body表示过程体.过程体是遵循PL/SQL块的结构,但不能使用declare关键字,end后面可带有过程名。 

注意:参数列表是可选的

◆调用存储过程:(存储过程创建的时候会自动的保存在Oracle中,在执行储存过程的时候,PL/SQL块只需调用即可!)

  (1)如果在PL/SQL块中调用,直接使用proc_name(...);
  (2)如果使用sql plus环境中,需要使用 EXEC proc_name(...)的形式;
  (3)如果存储过程无参数,这调用时可带有圆括号也可不带! 

【示例】创建一个无参数的存储过程(显示所有员工的信息)

create or replace procedure pr_show_employee 
is
--进入块的声明部分(无需编写declare关键字)
   --定义游标
   cursor v_emp_cursor is select * from employees;
   --定义游标类型的记录型行变量
   v_emp_record v_emp_cursor%rowtype;
begin
   for v_emp_record in v_emp_cursor loop
     dbms_output.put_line(v_emp_record.employee_id||','||v_emp_record.first_name||','||
               v_emp_record.last_name||','||v_emp_record.salary);
   end loop;
end pr_show_employee ;

--调用存储过程(在一个匿名块中执行)

begin
   pr_show_employee();
end; 

【示例】存储过程的参数接受产品类别编号,输出该类所有产品的信息

create or replace procedure pr_show_product(
product_type products.product_type_id%type)
as
 --定义游标
 cursor v_prd_cursor is select * from products p where product_type = p.product_type_id;
 --定义游标的行类型变量
 v_prd_record v_prd_cursor%rowtype;
begin
   for v_prd_record in v_prd_cursor loop
  dbms_output.put_line(v_prd_record.product_id||','||v_prd_record||','||product_type_id||','||v_prd_record.description||','
||v_prd_record.
name||','||v_prd_record.price);
   end loop;
end pr_show_product;


--调用存储过程(执行)
declare
    --定义编号变量的类型
    v_prd_type_id products.product_type_id%type := 1;
begin
   pr_show_product(v_prd_type_id);
end; 

◆参数的传递模式:

  参数传递有三种模式:in、out、in out
  in:过程调用时,实参的值会传递给形参。形参被看作是常量,在过程内部不能被修改。
  out:过程调用时,实参的值被忽略,形参为null值,在过程内部形参变量可以读写。过程结束时,形参的值赋值给实参!
  in out:过程调用时,实参的值传递给形参,在过程内部形参变量可读可写,过程结束时,形参的值赋值给实参。 

注意:如果在定义存储过程时,没有指明参数传递模式,则默认为 in 模式

【示例】创建一个有参数传递默认的存储过程

create or replace procedure pr_test(p_1 in out varchar2)
is 


begin
   dbms_output.put_line('p_1='||p_1);
   p_1 := 'abc'; 
   dbms_output.put_line('p_1='||p_1);
end pr_test;


--调用存储过程

declare
  v_1 varchar2(5) := 'wwww';
begin
  pr_test(v_1); 
  dbms_output.put_line('v_1='||v_1);
end;

注意:(1)在创建存储过程时,形参类型不能指定具体的长度,字符类型就为 varchar2,数字类型就是number;默认和实参类型的长度等同

     (2)使用 in 模式,形参接受实参的值,默认形参为常量,在存储过程当中不能被修改,否则出错!
     (3)使用 out 模式,实参的值被忽略,但必须是变量,用来接收存储过程执行完形参的值;而形参是可读可写的。
     (4)使用 in out 模式,实参的值传递给形参,也必须是变量,形参可读可写,最后执行完存储过程形参的值传递给实参!
     (5)参数传递,实参的值和长度或精度约束会传递给形参,因此,形参不能有长度或精度的约束。在过程中给形参赋值时,要注意它的长度或精度的限制!

感谢 阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Oracle中命名块之存储过程的详解  # Oracle中命名块  # ORACLE 10g 安装教程[图文]  # Oracle数据库下载及安装图文操作步骤  # Oracle存储过程基本语法介绍  # oracle常用sql语句  # oracle 创建表空间详细介绍  # ORACLE常用数值函数、转换函数、字符串函数  # oracle数据库tns配置方法详解  # 存储过程  # 返回值  # 只需  # 创建一个  # 结束时  # 发送给  # 都要  # 多个  # 将其  # 也可  # 能在  # 要注意  # 希望能  # 较好  # 能有  # 就可  # 被称为  # 可选  # 时就  # 可直接 


相关文章: 公司网站设计制作厂家,怎么创建自己的一个网站?  如何续费美橙建站之星域名及服务?  Swift中switch语句区间和元组模式匹配  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  建站主机系统SEO优化与智能配置核心关键词操作指南  如何通过PHP快速构建高效问答网站功能?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何选择PHP开源工具快速搭建网站?  深圳网站制作平台,深圳市做网站好的公司有哪些?  IOS倒计时设置UIButton标题title的抖动问题  网站好制作吗知乎,网站开发好学吗?有什么技巧?  建站10G流量真的够用吗?如何应对访问高峰?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  教学网站制作软件,学习*后期制作的网站有哪些?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  临沂网站制作企业,临沂第三中学官方网站?  ,想在网上投简历,哪几个网站比较好?  如何零基础开发自助建站系统?完整教程解析  如何用西部建站助手快速创建专业网站?  如何快速生成橙子建站落地页链接?  如何通过可视化优化提升建站效果?  智能起名网站制作软件有哪些,制作logo的软件?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  如何在香港免费服务器上快速搭建网站?  如何快速搭建自助建站会员专属系统?  如何用5美元大硬盘VPS安全高效搭建个人网站?  如何在腾讯云服务器快速搭建个人网站?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  网站制作模板下载什么软件,ppt模板免费下载网站?  如何自定义建站之星网站的导航菜单样式?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  内网网站制作软件,内网的网站如何发布到外网?  盐城做公司网站,江苏电子版退休证办理流程?  家庭建站与云服务器建站,如何选择更优?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  香港网站服务器数量如何影响SEO优化效果?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。