Oracle 存储过程的全局临时表的替代方法

2024-05-22

我已阅读并理解 Oracle 仅使用全局临时表,这与允许 #temp 表的 MS SQL 不同。我遇到的情况需要我创建数百个全局临时表,以完成我正在进行的从 MS SQL 到 Oracle 的数据库转换。我想知道除了创建必须在数据库中维护的所有这些表之外,在 Oracle 存储过程中是否还有另一种方法。

谢谢


“大多数时候临时表是在一个进程中使用的唯一东西 存储过程然后在末尾截断。我们不断升级 我们的应用程序并使它们具有一定的可比性确保了当 在一个版本中进行了更改,可以轻松地将其合并到 其他。”

T-SQL 临时表本质上是内存结构。它们在 MSSQL 中提供的优势在 Oracle 中不太明显,因为两种 RDBMS 架构存在差异。因此,如果您想要迁移,那么我们强烈建议您采取更适合 Oracle 的方法。

但是,您的情况有所不同,显然保持两个代码库同步将使您的生活更轻松。

当您想要使用临时表时,最接近临时表的是 PL/SQL 集合;具体来说,就是嵌套表。

有几种声明这些的方法。第一种是使用 SQL 模板(游标)并基于它定义嵌套表类型。第二种是声明一个记录类型,然后在其上定义一个嵌套表。无论哪种情况,都使用批量操作填充集合变量。

declare
    -- approach #1 - use a cursor
    cursor c1 is 
          select *
          from t23;
    type nt1 is table of c1%rowtype;
    recs1 nt1;

    -- approach #1a - use a cursor with an explicit projection
    cursor c1a is 
          select id, col_d, col_2 
          from t23;
    type nt1a is table of c1a%rowtype;
    recs1 nt1a;


    -- approach #2 - use a PL/SQL record
    type r2 is record (
        my_id number
        , some_date date
        , a_string varchar2(30)
    );
    type nt2 is table of r2;
    recs2 nt2;
begin
    select *
    bulk collect into recs1
    from t23;

    select id, col_d, col_2
    bulk collect into recs2
    from t23;
end;
/

使用游标的优点是可以自动反映基础表中的更改。尽管 RECORD 在面对基础表的变化时提供了稳定性的优势。这仅取决于您想要什么:)

PL/SQL 参考手册中有整整一章。阅读它以了解更多信息 http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites.htm#LNPLS005.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle 存储过程的全局临时表的替代方法 的相关文章

随机推荐

  • 没有使用 Angular 2 和 Http 服务的 XHRBackend 提供程序

    我正在构建一个基于 angular2 生成 angularcli webpack scss 和面向模块的项目 对于 http 请求 我决定创建一个由身份验证服务使用的服务 全部在 CoreModule 中引用 import NgModule
  • 如何在python上向另一个程序多次提供输入

    我想制作打开两个程序的 python 文件 这两个程序必须多次从对方获取输入 我打开了两个程序 并且知道如何向一个程序提供输入 但我不知道如何在一个程序上多次提供输入并多次获取输出 我的代码是这样的 subprocess call usr
  • 如何获取多个List的所有组合[重复]

    这个问题在这里已经有答案了 与上面建议的解决方案不同的是 列表项每行只能出现一次 这是我的水疗中心的预订系统 不同的员工可以进行不同的治疗 我有一个List
  • AngularJS 观察对象数组中的对象属性

    我有这个data在我的控制器中 scope data home baseValue 1 name home contact baseValue 2 name contract a lot more options 一些像这样的html se
  • 如何查看 Ubuntu 上的 Binutils 版本?

    我已经搜索过 但没有找到一个选项来告诉我我的 Ubuntu 上有哪个版本的 binutils 或者至少我不知道如何解释它 gcc v 没有透露任何有关 binutils 的信息 ld v 告诉我GNU ld GNU Binutils for
  • HttpRequest.RouteValues 属性无法从代码访问,但可以从调试器访问

    我正在尝试创建对特定请求执行一些检查的中间件 例如我有这样的路线 api Test paramToCheck aaa api Test bbb ccc 我有这些请求 http some host and port api Test 1234
  • 更改方法中变量的值,Java [重复]

    这个问题在这里已经有答案了 我有一个关于更改 Java 方法中变量值的问题 这是我的代码 public class Test public static void funk int a int b b 0 b 0 2 a b 0 5 pub
  • 如何在我的 Android 应用程序中启用分屏?

    我想为我的 Android 应用程序启用分屏 如果我尝试拖动我的应用程序以使其占据 Android 设备的上半部分 则会显示消息 应用程序不支持分屏 但是 对于 Facebook 和 WhatsApp 等其他应用程序 我可以使用分屏 我使用
  • iOS地理围栏,监控开始时在区域内如何处理?

    我一直无法弄清楚如何处理手机已经在某个区域内的情况startMonitoringForRegion叫做 其他问题建议致电requestStateForRegion inside didStartMonitoringForRegion然后调用
  • Objective-C 原始数之间的差异

    What is the difference between objective c C primitive numbers I know what they are and how to use them somewhat but I m
  • 匹配集合 Parallel.Foreach

    我正在尝试为 matchcollection 创建一个 Parallel Foreach 循环 它在我构建的刮刀中 我只需要知道在 Parallel Foreach 中放入什么 MatchCollection m Regex Matches
  • Xcode 6 Bug:Interface Builder 文件中的未知类

    我升级到 Xcode 6 beta 4 现在我的应用程序不断崩溃并显示以下消息 Interface Builder 文件中存在未知的类 X 它崩溃是因为据说 Xcode 找不到我在故事板中链接的自定义类 但它显示它们在 Xcode 界面中正
  • 如何在 Hibernate 拦截器中获取 Hibernate 会话?

    如何在 Hibernate 拦截器中获取 Hibernate 会话 我正在尝试使用 Hibernate 透明地强制按组织 ID 进行数据访问 我设置了一个全局过滤器来按组织 ID 过滤所有查询 现在 我需要在保存 更新之前使用实体拦截器在所
  • 如何使用 Java 在 RabbitMQ 中实现标头交换?

    我是一个新手 试图在java客户端中实现标头交换 我知道这就是 x match 绑定参数的用途 当 x match 参数设置为 any 时 只需一个匹配的标头值就足够了 或者 将 x match 设置为 all 强制所有值必须匹配 但任何人
  • 在三角域内生成随机位置

    我想生成x and y具有均匀分布且受限于 xmin xmax and ymin ymax 点 x y 应位于三角形内 我该如何解决这样的问题 下面是一些在平面中的任意三角形上均匀生成点的代码 import random def point
  • 如何在 PostgreSQL 9.5 中执行 INSERT INTO SELECT 和 ON DUPLICATE UPDATE?

    我正在尝试在 PostgreSQL 中执行以下操作 INSERT INTO blog sums blog id date total comments SELECT blog id 2016 09 22 count comment id a
  • iPhone 中的表视图属性

    如何更改iPhone中tableview中每行文本的颜色 有人知道吗 那么请给我指导 提前致谢 基本上你需要做的是以下内容tableView CellForRowAtIndexPath method cell textLabel textC
  • 将十进制值转换为十六进制值

    我编写了 C 代码来从十进制转换为十六进制 但我编译了该代码 它仅显示 10 到 15 的十六进制值 这意味着 A 到 F 请参阅下面的代码 main int n r 10 i d 0 e 1 printf Enter the decima
  • 除了用户名/密码之外的安全性?

    我有一个 Web 应用程序 其安全性要求高于普通 Web 应用程序 当任何用户访问域名时 他们都会看到两个文本字段 一个用户名字段和一个密码字段 如果他们输入有效的用户 密码 他们就可以访问 Web 应用程序 标准的东西 但是 我正在寻找超
  • Oracle 存储过程的全局临时表的替代方法

    我已阅读并理解 Oracle 仅使用全局临时表 这与允许 temp 表的 MS SQL 不同 我遇到的情况需要我创建数百个全局临时表 以完成我正在进行的从 MS SQL 到 Oracle 的数据库转换 我想知道除了创建必须在数据库中维护的所