Oracle PL/SQL 存储过程

Oracle

  1. 简介:

    是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。

  2. oracle安装

    Oracle一般安装于公司服务器中,更多应该关注于客户端连接数据方法。

  3. oracle连接

    1. 下载oracle客户端连接程序

      https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

      • 以下午的经验看,12.1的版本最常见。至于是64bit还是32bit要看服务器还有你自己的PL/SQL Developer程序的位数,如果按照方式流程全走完还是连接不成功则考虑更换位数版本。
    2. 安装并配置instant-client

      1. 解压至你自己想解压的目录则完成安装

      2. 根据官网要求,在“环境变量”→“系统变量”→“path”中添加配置instant-client的路径(就是你刚刚解压的路径)

      3. 配置tnsname.ora

        1. 在instant-client根目录创建用于存放tnsname.ora的目录,官方推荐为~\network\admin目录下,我个人配置为~config

        2. 在以上路径创建tnsname.ora文件,并填入以下信息,第一行为tnsname.ora全路径信息,第二段开始为自定义连接信息

          # tnsnames.ora Network Configuration File: D:\Oracle\instantclient_12_1\config\tnsnames.ora
          # Generated by Oracle configuration tools.orcl =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1 )(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl )))test-oracle =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = XXX.XXX.XXX.XXX )(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = XXXX)))
          
          • 其中,第一段内容解释如下

            • ORCL这个名字是由你自己取的,客户端是通过这个名字来获得服务器的登录信息的。
            • PROTOCOL是指定的通信协议,oracle是通过TCP/IP通信的。所以这里写TCP就好。
            • HOST的话如果客户端和数据库在同一台电脑可以用localhost也可以用IP。如果不同电脑就必须用IP了,是oracle所在电脑的IP。
            • PORT一般都是1521
            • SERVER是dedicated检测模式的监听。(这个我也不是很清楚,还有一中是请求还是怎么样)
            • service_name是oracle的SID
      4. 配置环境变量使之生效

        在“环境变量”→“系统变量”中新建一个变量,name为TNS_ADMIN,路径为存放tnsname.ora的目录,如本例中为config

      5. 客户端软件连接

        推荐使用PL/SQL Developer连接使用。如何使用及配置见下文

  4. PL/SQL Developer连接和使用

    1. 连接配置

      参考此博客:https://blog.csdn.net/master_yao/article/details/51055850,instant-client配置请忽略上文已讲

    2. 简单使用

      1. 打开软件连接成功后,首先查看左侧栏,选中Objects栏,最大化,只看它即可
      2. 该窗口中,要显示全部可查看内容,则下拉选项中,选择所有用户和All Objects;选择My Objects则显示自己定义的库内容;
      3. 该窗口中,主要要查看的信息有
        • Functions:存储函数
        • Procedures:存储过程
        • Tables:表
        • Indexs:索引
        • Sequences:序列(类似于MySQL的主键自增功能)
        • Users:用户
        • Tablespaces:表空间
          • 还有两个不知道有没有用的信息:Packages和Types
      4. 对具体存储函数和存储过程,右键可执行,编辑等,如有权限还可以测试
      5. 对表、索引等操作比较常规就不过多说
      6. 右侧大片空白区域,右键可新建SQL窗口用于书写SQL语句,选中要执行的语句点击绿色三角符号即可执行
  5. Oracle操作:

    包括表的CRUD,属性的CRUD、单\多行函数(count之类的)、条件表达式、分组查询、多表查询、连接、分页查询、视图、索引等,与常规SQl相似,就不过多学习,遇到问题现学。

    学习链接:https://www.bilibili.com/video/BV1WZ4y1H7du?p=543

  6. 触发器:略。学习链接:https://www.bilibili.com/video/BV1WZ4y1H7du?p=566

  7. java使用存储过程和存储函数

    1. 常规的java配置数据库环境的配置
    2. 在调用方法时,替换为存储过程/函数即可

PL/SQL

https://www.bilibili.com/video/BV14W411u7wT?t=18&p=34

  1. 简介:

    PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。

  2. 官方文档:

    https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/overview.html#GUID-2FBCFBBE-6B42-4DB8-83F3-55B63B75B1EB

  3. PL/SQL 块的基本结构

    << label >> (optional)  --<<标签>>(可选)
    DECLARE    -- Declarative part (optional)声明部分(可选)-- Declarations of local types, variables, & subprograms局部类型,变量和子程序的声明BEGIN      -- Executable part (required)可执行部分(必填)-- Statements (which can use items declared in declarative part)语句(可以使用声明部分中声明的项目)[EXCEPTION -- Exception-handling part (optional)处理部分(可选)-- Exception handlers for exceptions (errors) raised in executable part在可执行文件中提出的例外(错误)的异常处理程序
    ]
    END;
  4. 三类控制语句

    1. 条件选择:https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/plsql-control-statements.html#GUID-B7DD4E62-3ED2-41E9-AAE5-90A78788BB31
    2. 循环语句:https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/plsql-control-statements.html#GUID-4CD12F11-2DB8-4B0D-9E04-DF983DCF9358
    3. Sequential control statements顺序控制语句:https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/plsql-control-statements.html#GUID-7CA9E984-CCB3-4DB8-8D0C-30BF0C74BA83
  5. 游标

    游标是指向私有 SQL 区域的指针,该区域存储有关处理特定 SQL 语句或 PL/SQL SELECT INTO 语句的信息。

    https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/static-sql.html#GUID-F1FE15F9-5C96-4C4E-B240-B7363D25A8F1

  6. 异常和触发器

    1. 异常

      • 异常类型

        • Internally Defined Exceptions

          内部定义的异常

        • Predefined Exceptions

          预定义的异常

        • User-Defined Exceptions

          用户定义异常

      • 异常区分

        Category 类别 Definer 定义者 Has Error Code 有错误代码 Has Name 有名字 Raised Implicitly 隐式声明 Raised Explicitly 显示声明
        Internally defined内部定义 Runtime system Always Only if you assign one除非你指派一个 Yes Optionally支持
        Predefined预定义的 Runtime system Always Always Yes Optionally支持
        User-defined用户自定义 User Only if you assign one除非你指派一个 Always No Always
      • 异常处理部分结构

        EXCEPTIONWHEN ex_name_1 THEN statements_1                 -- Exception handlerWHEN ex_name_2 OR ex_name_3 THEN statements_2  -- Exception handlerWHEN OTHERS THEN statements_3                      -- Exception handler
        END;
        --WHEN OTHERS THEN一定在最后
        
      • 内部定异常语句

        DECLAREdeadlock_detected EXCEPTION;PRAGMA EXCEPTION_INIT(deadlock_detected, -60); -- -60为内部异常,可在文档找到内部异常含义
        BEGIN...
        EXCEPTIONWHEN deadlock_detected THEN...
        END;
        
      • 用户自定义异常语句

        CREATE PROCEDURE account_status (due_date DATE,today    DATE
        ) AUTHID DEFINER
        ISpast_due  EXCEPTION;  -- declare exception
        BEGINIF due_date < today THENRAISE past_due;  -- explicitly raise exceptionEND IF;
        EXCEPTIONWHEN past_due THEN  -- handle exceptionDBMS_OUTPUT.PUT_LINE ('Account past due.');
        END;
        
        • 关键:RAISE关键字抛出异常
    2. 触发器:略,需要再学

  7. 存储过程

    见下方存储过程

    简单实例:https://www.bilibili.com/video/BV14W411u7wT?p=41

存储过程

简介:存储过程 (Stored Procedure) 是在大型数据库系统中 , 一组为了完成特定功能的 SQL 语句集 , 存储在数据库中 , 经过第一次编译后再次调用不需要再次编译 , 用户通过指定存储过程的名字并给出参数 (如果该存储过程带有参数) 来执行它 , 存储过程是数据库中的一个重要对象 ; 存储过程中可以包含 逻辑控制语句 和 数据操纵语句 , 它可以接受参数 , 输出参数 , 返回单个或多个结果集以及返回值 ;

  • 优缺点:https://blog.csdn.net/tojohnonly/article/details/70738629
Oracle存储过程
  1. https://www.bilibili.com/video/BV1WZ4y1H7du?p=562,简单演示视频

  2. 比较全面的博客总结:https://blog.csdn.net/weixin_41968788/article/details/83659164/

  3. Open for语句与游标的使用:https://blog.csdn.net/keven2840/article/details/77870465/

  4. 异常:https://blog.csdn.net/qq_34745941/article/details/82846820

    • 抛出异常后,PL/SQL 块或子程序的正常执行将停止,并将控制转移到其异常处理部分(即捕获异常代码块):

      EXCEPTIONWHEN exception_name1 THEN  -- handlersequence_of_statements1WHEN exception_name2 THEN  -- another handlersequence_of_statements2...WHEN OTHERS THEN           -- optional handlersequence_of_statements3
      END;
      

      原文:https://docs.oracle.com/cd/B10501_01/appdev.920/a96624/07_errs.htm

      When an exception is raised, normal execution of your PL/SQL block or subprogram stops and control transfers to its exception-handling part, which is formatted as follows:

MySQL存储过程
  1. 官方文档:https://dev.mysql.com/doc/refman/5.7/en/stored-objects.html

  2. 非常全面的总结:https://www.runoob.com/w3cnote/mysql-stored-procedure.html

  3. 游标:

    https://blog.csdn.net/liguo9860/article/details/50848216

    https://blog.csdn.net/weixin_42981419/article/details/86162179

Oracle存储过程向MySQL转换
  1. 全面的博客总结:

    • https://blog.csdn.net/shy_snow/article/details/78262644
    • https://www.cnblogs.com/HondaHsu/p/3641258.html
    • https://www.cnblogs.com/loveismile/p/5030911.html
  2. oracle的SYS_REFCURSOR游标,在MySQL的转换方案
    1. https://forums.mysql.com/read.php?10,434966,434966#msg-434966
    2. https://blog.csdn.net/weixin_35755188/article/details/114341979

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

  1. Oracle PL/SQL存储过程对象类型Object type详解 create type obj_type as object, create table tab_name of obj_type

    原 oracle 对象类型 object type 置顶 2011年06月13日 18:00:00 oypj2010 阅读数:3453 /* 对象类型属于用户自定义的一种复合类型,它封装了数据结构和拥 ...

  2. Oracle PL/SQL 存储过程

    PROCEDURE name [(parameter[,parameter,...])] IS [local declarations] BEGIN execute statements [EXCEP ...

  3. oracle存储过程多分支怎样写,如何从存储过程返回多行? (Oracle PL / SQL)

    如何从存储过程返回多行? (Oracle PL / SQL) 我想用一个参数创建一个存储过程,该存储过程将根据参数返回不同的记录集. 这是怎么做的? 我可以从普通SQL中调用它吗? 5个解决方案 65 ...

  4. oracle pl/sql 程序设计 历史笔记整理

    20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...

  5. ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

    原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE P ...

  6. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)...

    [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) 原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之 ...

  7. Oracle PL/SQL进阶

    Oracle PL/SQL进阶 控制结构 在任何计算机语言(c,java,c#,c++)都有各种控制语句(条件语句,循环语句,顺序控制结构..)在pl/sql中也存在这样的控制结构. 条件分支语句 p ...

  8. Oracle PL/SQL基础知识

    Oracle PL/SQL基础知识 过程(存储过程) 过程用于执行特定的操作,当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out).通过在过程中使用输入参数,可以将数据传递到执行部分 ...

  9. Oracle PL/SQL入门

    Oracle PL/SQL入门 为了解决纯SQL语句的缺陷问题,采取了PL/SQL(Procedure Language/Structured Query Language)的方式进行解决. 纯SQL ...

最新文章

  1. Android中网络使用
  2. 超级变态的MySQL语句[2012-9-20]
  3. Qt编译过程中出现的问题
  4. 网站编程手册 服务器端,Peergine-P2P服务器端开发手册-v1.3.doc
  5. POJ1683 Puzzlestan ——Floyd传递闭包+Dfs
  6. java 原子类_小学妹教你并发编程的三大特性:原子性、可见性、有序性
  7. 【独家揭秘】阿里怎么做双11全链路压测?| CSDN 博文精选
  8. 回文子序列_计算回文子序列的总数
  9. MultiMedia eXtensions - MMX:第一套应用于英特尔 80x86 指令集的 SIMD 扩展
  10. STM32学习第三课:STM32 c语言学习基础3(内存操作、指针、结构指针)
  11. 如何更优雅地切换Git分支
  12. Android项目实战(二):安卓应用程序退出的三种方法
  13. MSCHART控件中长字符的X轴坐标标注全部显示
  14. CocoaPods安装和使用图解
  15. 雷电模拟器命令操作合集
  16. Linux -shell 基础
  17. Android 检查权限总是 PERMISSION_GRANTED
  18. VUE中V-IF条件判断改变元素的样式
  19. 头歌平台数据结构与算法 单链表实验 第1关:倒置链表
  20. 如何屏蔽掉某网址不能访问

热门文章

  1. 访问权限为 644Linux,linux权限---【600,644,700,755,711,666,777】
  2. java sqlserver ssl_如何解决无法通过SSL加密与SQLServer建立连接
  3. grep 正则表达式 匹配url
  4. word自动生成章节标题
  5. 布隆过滤器(BloomFilter)原理和实现
  6. 隐形牙套牙齿矫正水深套路多?选对产品很重要
  7. 如何在Mac上关闭iMessages
  8. ForkJoin的使用
  9. 域名分类有哪些?域名级别有哪些?
  10. 谷歌:21款恶意Android应用,你中招了吗?