zoukankan      html  css  js  c++  java
  • oracle存储过程

    一.存储过程是一组为完成特定功能的sql语句,经编译后存储在数据库中。当一个事务涉及到多个sql语句或者多个表的操作时要考虑使用存储过程;还有当一个事务的完成需要复杂的商业逻辑(对多个数据操作,对多个状态的判断更改)以及比较复杂的统计和汇总也需要进行考虑。

    二.存储过程的优缺点

    优点:
    1.使程序执行效率更高,安全性更好,过程建立后已经编译并且储存到数据库,直接写sql就需要先分析再执行,而且直接写sql会带来安全问题,例如sql注入等。
    2.过程只是在调用时才使用,所以不会很占系统资源。
    3.可以用于降低网络流量,存储过程代码直接存储于数据库中,不会产生大量T-sql语句的代码流量。
    4.增强对执行计划的重复使用,可以通过使用远程过程调用 (RPC) 处理服务器上的存储过程而提高性能。
    5.可维护性高。
    6.代码精简一致,一个存储过程可以用于程序的不同位置。
    7.增强安全性。(1)向用户授予对存储过程(而不是表)的访问权限,可提供对特定数据的访问;(2)提高代码安全,防止sql注入(未彻底解决);(3)SqlParameter 类指定存储过程参数的数据类型,可以验证用户提供的值类型。

    缺点:大量利用过程,会对服务器造成较大压力。

    参考博客:https://www.cnblogs.com/dc-earl/articles/9260111.html

    三.存储过程的编写

    语法:存储过程的语法不同于java语法,连接两个字符串使用||而不是+,在给变量赋值时需要使用:=,在循环语句中需要使用到loop。循环可以使用for循环,也可以用while语句实现,语句基本如下:for i in 循环数据 loop(while 循环条件 loop),最终在循环结束后使用end结束循环。

    语句:

    1 create or replace procedure myDemo01(name1 varchar,age int) is
    2 i number;
    3 begin
    4   i:=1;
    5   for i in 1..10 loop
    6     dbms_output.put_line('name='||name1||',age='||age);
    7   end loop;
    8 end myDemo01;

    第1行:说明创建一个新的或者覆盖原有的存储过程,myDemo01即为新的存储过程的名字,当存储过程没有参数时,可以将括号去掉;is:在视图中只能用as不能用is;在游标中只能用is不能用as,as在存储过程以及函数中没有区别。

    第2行:自定义变量 ,i为变量名,后面number为变量类型,可在两个之间添加in

    第3行:语句执行开始,在里边即可以写语句,包括sql语句等等,在这里使用for循环进行测试

    第4行:将定义的变量值赋为1

    第5行:for循环,1..10,中间用两个点,也可替换为其它数组,也可换为select查询语句返回的结果集

    第6行:将结果输出以供查看

    第7行:结束for循环

    第8行:结束存储过程。

    进行测试时,先对存储过程进行编译,然后在plsql中右键存储过程,点击测试,在里边输入测试语句进行测试,如图:

    声明declare关键字,下边是对于变量的定义,在调用存储过程时括号内需要使用=>来进行传参

    看输出结果可以点击旁边的DBMS 输出进行查看:

    四、游标的介绍

           游标是sql的一个内存工作区,以变量形式定义,其作用就是用来临时存储从数据库中提取的数据块,游标分为两种类型,显式和隐式,一次只从数据库中提取一行数据,这种形式使用隐式游标,当提取多行数据,就需要使用显式游标,其对应一个返回结果为多行多列的select语句,游标打开后,从数据库中传送到游标变量中,然后应用程序再从游标变量中分解出需要的数据,并进行处理。

    隐式游标:属性有以下四种

    1     隐式游标的属性 返回值类型   意    义   
    2     SQL%ROWCOUNT    整型  代表DML语句成功执行的数据行数   
    3     SQL%FOUND   布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功   
    4     SQL%NOTFOUND    布尔型 与SQL%FOUND属性返回值相反   
    5     SQL%ISOPEN  布尔型 DML执行过程中为真,结束后为假  

    显式游标:

    使用分为4步:1.声明游标,declare部分  cursor 游标名[参数1 数据类型[,参数2 数据类型...])] is select语句,select语句中可以包含where,order by和group by等子句,不能使用into语句;2.打开游标,begin之后   open 游标名[参数1 数据类型[,参数2 数据类型...])];3.提取数据,提取必须在打开之后进行,fetch 游标名 into 变量名1[,变量名2...]或者FETCH 游标名 INTO 记录变量,使用记录变量需要提前定义,方法如下:变量名 表名|游标名%ROWTYPE,其中表已存在,游标已定义;4.关闭游标,close 游标名;显式游标打开后必须显式关闭,游标一旦关闭,其所占用资源就会被释放,必须再次打开才能使用。

    游标详细介绍参考博客:https://blog.csdn.net/liyong199012/article/details/8948952

  • 相关阅读:
    cocos: RenderTexture 合并精灵图片
    itms-services 方式安装ipa 无法连接到网址(eg. 我用的ip:172.26.167.82)
    ios 信任自签名证书
    mac 浏览器(chrome, safari)信任自签名证书
    ##ant 打包apk
    #lua中编写shader的方式
    cocos:C++ 导出到lua, cocos2dx_extension.ini修改
    cocos:C++ 导出到lua, genbindings.py修改
    quick如何打开工程或者示例
    quick 中 "我的项目" 中的列表从那里来的?
  • 原文地址:https://www.cnblogs.com/jokerr/p/11399761.html
Copyright © 2011-2022 走看看