【问题标题】:PL/SQL to insert history row with long raw column in OraclePL/SQL 在 Oracle 中插入具有长原始列的历史行
【发布时间】:2011-12-22 21:59:39
【问题描述】:

我在 Oracle 表中有一个很长的原始列。使用 select 插入不起作用,因为我的 select 语句中的原始列很长。基本上我正在尝试插入以插入更改了几个参数的历史记录行。因此,我正在考虑在 Oracle 中使用 PL/SQL。我在 PL/SQL 方面没有经验,在谷歌搜索了几天后我也没有得到任何东西。任何人都可以帮助我解决我的问题的示例 PL/SQL 吗?提前致谢 !!!

【问题讨论】:

    标签: oracle plsql long-integer


    【解决方案1】:

    LONG 和 LONG RAW 数据类型已被弃用,并且已经存在很多年了。远离他们真的会好很多。

    话虽如此,如果您使用 PL/SQL,您将被限制为 32,760 字节的数据,这是 LONG RAW PL/SQL 数据类型将容纳的最大值。但是,LONG RAW 数据库数据类型最多可容纳 2GB 的数据。因此,如果表中的 任何 行包含长度超过 32,760 字节的数据,您将 无法使用 PL/SQL 检索它。这是 LONG 和 LONG RAW 数据类型的基本限制,也是 Oracle 弃用它们的原因之一。

    在这种情况下,唯一的选择是 Pro*C 或 OCI。

    更多信息可以在这里找到: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/datatypes.htm#CJAEGDEB

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      如果您的数据限制为 32kB,您可以直接在 PL/SQL 中使用 LONG RAW 列:

      FOR cc IN (SELECT col1, col2... col_raw FROM your_table) LOOP
         INSERT INTO your_other_table (col1, col2... col_raw) 
            VALUES (cc.col1, cc.col2... cc.col_raw);
      END LOOP;
      

      如果任何 LONG RAW 大于 32k,这将失败。

      在这种情况下,您将不得不使用另一种语言。您可以使用 java,因为它包含在 DB 中。我已经用 LONG RAW 和 java 回答了几个关于 SO 的问题:

      无论如何,正如您所注意到的,使用这种数据类型是一件很痛苦的事情。如果无法转换为 LOB,则必须使用解决方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-06
        • 1970-01-01
        • 2020-08-01
        • 1970-01-01
        • 2017-10-18
        • 2020-09-29
        • 1970-01-01
        • 2016-05-09
        相关资源
        最近更新 更多