返回顶部
首页 > 资讯 > 数据库 >怎么进行PLSQL重点问题理解和实战
  • 930
分享到

怎么进行PLSQL重点问题理解和实战

2024-04-02 19:04:59 930人浏览 独家记忆
摘要

本篇文章给大家分享的是有关怎么进行PLsql重点问题理解和实战,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 一 oracle中PL/SQL

本篇文章给大家分享的是有关怎么进行PLsql重点问题理解和实战,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

oracle中PL/SQL使用的集合变量类型有RECORD(类)、VARRAY(sql数组)、TABLE(嵌套表)
TABLE(嵌套表) 可以加index定义也可以不加,加表示index by是建立主键索引相当于数组,不加就是个嵌套表集合
1 TABLE(嵌套表)定义表变量类型
  type type_table_emp_empno is table of emp.empno%type index by binary_integer;--TYPE表示表中一行中字段类型
  v_empnos type_table_emp_empno;
  如果用%type定义
  定义集合变量v_empnos 是一个有emp.empno字段类型的数组,自己理解是存放实际还是一个表,里面只有一个字段,且字段上有索引
  对此集合变量(is table of index by)类型的操作 包括count,delete,但不能用trim
  对VARRAY 可以用count,delete和trim
  使用形式
  select to_char(truck_in_out_id),
        employee_id,
        employee_nm,
        truck_in_purpose
   bulk collect into
        carid,
        empid,
        empnm,
        dest
 
   forall i in 1 .. carid.COUNT
 
   update cpnew.CP_VISIT_APPLY  a
      set a.mgr_principal_id = empid(i),
          a.mgr_principal_nm = empnm(i),
          a.visit_dest       = dest(i)
    where a.visit_apply_id = carid(i)
      and a.mgr_principal_id is null;
  
  type delArray1 is table of TEST.COURSE%ROWTYPE index by binary_integer; --ROWTYPE表示表中一行的记录类型
  cur_result delArray1;
  如果用%rowtype定义
  定义集合变量cur_result是一个COURSE表类型的集合,自己理解是按一个表存放,里面包括COURSE的所有字段类型,且用整形数做这个表的索引
  使用形式
  select * bulk collect into cur_result
 
   forall i in 1 .. cur_result.COUNT
 
   update cpnew.CP_VISIT_APPLY  a
      set a.mgr_principal_id = cur_result(i).empid,
          a.mgr_principal_nm = cur_result(i).empnm,
          a.visit_dest       = cur_result(i).dest
    where a.visit_apply_id = cur_result(i).carid
      and a.mgr_principal_id is null;
 
 
实际工作中的例子
plsql 大数据量删除,修改的方法FORALL加bulk collection into
create or replace procedure zl_del_UPDATEAPPLY_DEST187 as
  --type ridArray is table of rowid index by binary_integer;
  type delArray1 is table of varchar2(32) index by binary_integer;
  type delArray2 is table of CP_2012.CP_VISIT_TRUCK_INOUT.employee_id%type index by binary_integer;
  type delArray3 is table of CP_2012.CP_VISIT_TRUCK_INOUT.employee_nm%type index by binary_integer;
  type delArray4 is table of CP_2012.CP_VISIT_TRUCK_INOUT.truck_in_purpose%type index by binary_integer;
  //你会发现用%type就得每个字段都得定义他的类型
  carid delArray1;
  empid delArray2;
  empnm delArray3;
  dest delArray4;
begin
 
   select to_char(truck_in_out_id),
        employee_id,
        employee_nm,
        truck_in_purpose
   bulk collect into
        carid,
        empid,
        empnm,
        dest
   from CP_2012.CP_VISIT_TRUCK_INOUT;
   --where rownum < 600001;
 
  forall i in 1 .. carid.COUNT
 
   update cpnew.CP_VISIT_APPLY  a
      set a.mgr_principal_id = empid(i),
          a.mgr_principal_nm = empnm(i),
          a.visit_dest       = dest(i)
    where a.visit_apply_id = carid(i)
      and a.mgr_principal_id is null;

  DBMS_OUTPUT.PUT_LINE(to_char(carid.COUNT) ||
                       ' records deleted from temp_mid_hubei_bak   !!!');                
  
end;
这种方法最大缺点是forall里不能访问远程表,也不能用dblink,且只能放dml语句不能用dbms.putline
经过测试过发现for可以替代forall尽管时间相对慢一点,但也能接受,所以可以在for中用dblink,相应语句如下:

for i in 1 .. carid.COUNT

  loop
     update cpnew.CP_VISIT_APPLY@LINK_213TO187_CPNEW  a
      set a.mgr_principal_id = empid(i),
          a.mgr_principal_nm = empnm(i),
          a.visit_dest       = dest(i)
     where a.visit_apply_id = carid(i)
      and a.mgr_principal_id is null;

2 Record变量类型:(相当于java的类)
定义
type type_record_dept is record
        (
            deptno dept.deptno%type,
            dname dept.dname%type,
            loc dept.loc%type
        );
    v_temp type_record_dept;

3 VARRAY
定义和使用
CREATE OR REPLACE TYPE numbers_t IS VARRAY (5) OF NUMBER
DECLARE
   l_list numbers_t:= numbers_t (1, 2, 3, 4, 5);
BEGIN
   l_list.DELETE;
   DBMS_OUTPUT.put_line (CASE l_list.COUNT WHEN 0 THEN 'Empty' END);
END;
数组使用例子 参考 Oracle数组的使用 Http://blog.itpub.net/12932950/viewspace-351791/

还可以对比本人之前的blog查看游标和bulk collect into的用法 http://blog.itpub.net/750077/viewspace-2075986/

二 PL/SQL异常

异常类型 1预定义的异常处理,2非预定义 ( Predefined )错误,3用户定义(User_define) 错误
一般预定义和用户定义异常使用较多
1预定义异常 如oracle已定义的异常
ORA-1403 No_data_found SELECT INTO没有找到数据

使用时如果select没查出数据时就直接处理没找到数据的异常
EXCEPTION
 WHEN NO_DATA_FOUND THEN 
      DBMS_OUTPUT.PUT_LINE('数据库中没有编码为'||v_empno||'的员工');
END;
2用户自定义异常
用户先定义异常
no_result  EXCEPTION;
如没有更新的数据时,抛出这个异常
UPDATE employees SET salary = salary+100 WHERE employee_id = v_empno;
   IF SQL%NOTFOUND THEN
      RaiSE no_result;
   END IF;
然后处理这个异常
EXCEPTION
   WHEN no_result THEN
      DBMS_OUTPUT.PUT_LINE('你的数据更新语句失败了!');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END;
SQLCODE,SQLERRM是ORACLE函数,会打印错误代码和错误名称

以上就是怎么进行PLSQL重点问题理解和实战,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 怎么进行PLSQL重点问题理解和实战

本文链接: https://lsjlt.com/news/65786.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么进行PLSQL重点问题理解和实战
    本篇文章给大家分享的是有关怎么进行PLSQL重点问题理解和实战,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 一 ORACLE中PL/SQL...
    99+
    2024-04-02
  • Navicat统计的行数和表实际行数不一致的问题怎么理解
    本篇内容介绍了“Navicat统计的行数和表实际行数不一致的问题怎么理解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!背景近期为了保障线上数...
    99+
    2023-06-21
  • 怎么解决PLSQL连接服务器与执行SQL语句非常慢问题
    本篇内容主要讲解“怎么解决PLSQL连接服务器与执行SQL语句非常慢问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决PLSQL连接服务器与执行SQL语...
    99+
    2024-04-02
  • vue怎么解决代理和跨域问题
    这篇“vue怎么解决代理和跨域问题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue怎么解决代理和跨域问题”文章吧。一、安...
    99+
    2023-07-04
  • 怎么进行SAP document builder常见问题的解答分析
    怎么进行SAP document builder常见问题的解答分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。如果要想把DOCX render成PDF 格式,需要serv...
    99+
    2023-06-04
  • PHP Git:知识点问题解决和项目管理最佳实践
    使用 Git 命令行工具:熟练掌握 Git 命令,如 git clone、git add、git commit 和 git push,以有效地管理代码库。 理解 Git 工作流:了解不同 Git 工作流,如集中式和分布式模型,以及分支、...
    99+
    2024-04-02
  • Cassandra节点失效和数据恢复问题怎么处理
    当Cassandra节点失效时,通常会采取以下措施进行数据恢复处理: 启动新的Cassandra节点:如果一个节点失效,可以启动...
    99+
    2024-03-11
    Cassandra
  • Golang处理浮点数遇到的精度问题怎么解决
    这篇文章主要介绍“Golang处理浮点数遇到的精度问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Golang处理浮点数遇到的精度问题怎么解决”文章能帮助大家解决问题。一、浮点数是什么?浮...
    99+
    2023-06-29
  • IIS7.5上运行的PHP站点上出现乱码问题怎么解决
    PHP是一种非常流行的Web编程语言,是构建Web应用程序的一个有力工具之一。然而,在使用PHP编写中文网页时可能会遇到一些问题,例如在IIS 7.5上运行的PHP站点上出现乱码问题。这篇文章将探讨这个问题的根源,并介绍如何解决这个问题。根...
    99+
    2023-05-14
    iis php
  • 阿里云服务器优点和缺点有哪些问题呢怎么解决
    稳定性强:阿里云服务器具有高稳定性,无论是在极端天气下还是高负载情况下都能保持稳定运行。 快速响应:阿里云服务器采用全球化的技术支持,能够快速响应用户需求,保证服务的高效性。 可靠性高:阿里云服务器拥有强大的备份和容灾能力,能够保证数据的...
    99+
    2023-10-28
    阿里 优点 缺点
  • C语言和命令行间的交互问题怎么解决
    本篇内容主要讲解“C语言和命令行间的交互问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言和命令行间的交互问题怎么解决”吧!在Windows操作系统中,后缀为.exe的文件都是可执...
    99+
    2023-06-17
  • 怎么解决PHP7中对十六进制字符串处理的问题
    这篇文章主要讲解了“怎么解决PHP7中对十六进制字符串处理的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决PHP7中对十六进制字符串处理的问题”吧!具体问题:$t1 =...
    99+
    2023-06-25
  • 深入学习Golang的打包实战指南: 探索使用Golang进行打包及解决常见问题的方法
    Golang打包实战指南:利用golang进行打包并解决常见问题引言:Golang是一门流行的编程语言,其强大的并发性和高效的编译器使其成为很多开发者的首选。在开发过程中,我们经常需要将我们的代码打包成可执行文件或库,以便在其他环境中部署和...
    99+
    2023-12-29
    Golang 打包 解决问题
  • Java的编译时错误和运行时错误问题怎么解决
    本篇内容介绍了“Java的编译时错误和运行时错误问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java编译时错误和运行时错误1....
    99+
    2023-07-05
  • LeetCode索引中的重定向问题:使用Go语言进行快速解决的方法是什么?
    LeetCode是一个非常流行的算法题库,它提供了大量的算法题目供程序员们练习和提高自己的算法能力。然而,有时候我们会遇到LeetCode索引中的重定向问题,这个问题会影响我们的学习进程,因此我们需要一种快速解决的方法。在这篇文章中,我们将...
    99+
    2023-09-23
    重定向 leetcode 索引
  • 怎么解决sql server代理中作业执行SSIS包失败的问题
    本篇内容主要讲解“怎么解决sql server代理中作业执行SSIS包失败的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决sql server代理中...
    99+
    2024-04-02
  • 怎么解决rman中进行catalog start with无法注册部分备份文件问题
    本篇内容介绍了“怎么解决rman中进行catalog start with无法注册部分备份文件问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情...
    99+
    2024-04-02
  • 免实名服务器怎么解决反爬和IP被封问题
    免实名服务器解决反爬和IP被封的方法:1、减慢网站爬取速率,能减小目标网站的压力;2、用动态拨号vps服务器设置变换IP,能解决反爬和IP被封的问题,但会降低获取速度。具体内容如下:1、减慢爬取速率那样目标网站的压力就会相对性减小,可是这么...
    99+
    2024-04-02
  • 怎么解决mybatis映射和实际类型不一致的问题
    本篇内容主要讲解“怎么解决mybatis映射和实际类型不一致的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决mybatis映射和实际类型不一致的问题”吧!mybatis映射和实际类型...
    99+
    2023-06-21
  • MSSQL中进行SQL除法运算结果为小数却显示0的问题怎么解决
    这篇文章主要讲解了“MSSQL中进行SQL除法运算结果为小数却显示0的问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MSSQL中进行SQL除法运...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作