zoukankan      html  css  js  c++  java
  • PL/SQL 批量SQL

    批量SQL包括:

    FORALL语句

    BULK COLLECT子句

    FORALL语句

    FORALL具有如下结构:

    FORALL loop_counter IN bounds_clause [SAVE ECEPTIONS]

    SQL_STATEMENT;

    其中, bounds_clause是下面形式之一:

    lower_limit .. upper_limit

    INDICES OF collection_name [BETWEEN lower_limit .. upper_limit]

    VALUES OF collection_name

    第一种与for循环一样。

    第二种用于稀疏数组,比如一个嵌套表,删除了其中某几项,遍历时会自动跳过执行语句。

    第三种同样用于数组,但不是稀疏的,因此当VALUES OF 子句所引用的集合是空的,FORALL语句会导致异常。

    另外,如果VALUES OF使用的是联合数组(即类似于Hashtable),必须是使用PLS_INTEGER或BINARY_INTEGER进行索引。VALUES OF的集合元素必须是PLS_INTEGER或BINARY_INTEGER。

    SAVE EXCEPTIONS

    如果在当前对应的SQL语句执行出现异常的情况下仍希望继续执行,那么需要添加SAVE EXCEPTIONS关键字。这些异常被存储在名为SQL%BULK_EXCEPTIONS的游标属性中。SQL%BULK_EXCEPTIONS是个记录集合,其中每个记录都有两个字段,ERROR_INDEX和ERROR_CODE。ERROR_INDEX表示出错的语句在FORALL中的迭代编号,ERROR_CODE会存储对应于所抛出的异常的ORACLE错误代码。为了获取异常信息,可用SQLERRM函数,传入ERROR_CODE即可。注意传入时,会添加一个负号作为前缀。

    BULK COLLECT子句

    BULK COLLECT 类似于游标循环,用上BULK COLLECT可用于批量SELECT INTO 和 FETCH INTO(SELECT * BULK COLLECT INTO 或 SELECT * BULK COLLECT INTO)。同时,当不返回任何数据时,不会抛出NO_DATA_FOUND的异常,因此,有必要判断返回的集合是否包含数据(COUNT是否为0)。

    由于 BULK_COLLECT子句不会限制集合的尺寸,并能自动扩展。因此当SELECT语句返回大量数据时,最好限制结果集的大小。通过LIMIT选项可以实现这个目标。

  • 相关阅读:
    pointer-net
    pytorch0.4版的CNN对minist分类
    python+selenium遍历某一个标签中的内容
    selenium提取不了标签文本
    IndentationError: unindent does not match any outer indentation level
    windows下载安装mysql
    引用opencv异常
    jenkins简单安装及配置(Windows环境)
    多台服务器-SSH免密登录设置
    scheduleAtFixedRate 与 scheduleWithFixedDelay 的区别
  • 原文地址:https://www.cnblogs.com/kingsleylam/p/3293273.html
Copyright © 2011-2022 走看看