ORA-00997: 非法使用 LONG 数据类

本文描述了一个同事在创建表时遇到的ORA-00997错误,原因是Oracle不支持LONG类型在排序、分组和SELECT子句中的使用。通过模拟实验验证了这一问题,并提供了两种解决方法:修改字段类型为CLOB,以及在需要时使用TO_LOB函数转换LONG类型。
摘要由CSDN通过智能技术生成

一、问题场景描述

      工作过程中,同事反馈创建表时出现报错,提示如下:

报错位置:ORA-06512: 在 "NH_XXX_SX.GET_FINANCE_SX", line 64

报错信息:ORA-00997: 非法使用 LONG 数据类

      执行语句如下:(执行后确实有上面报错)

CREATE TABLE NH_MCRO_FINANCE_SX.QUEST_SL_TEMP_EXPLAIN1 AS SELECT    * FROM QUEST_SL_TEMP_EXPLAIN1@FINANCE a ;

       建表语句摘出:

create global temporary table QUEST_SL_TEMP_EXPLAIN1
(
  statement_id      VARCHAR2(30),
  plan_id           NUMBER,
  timestamp         DATE,
  
  partition_start   VARCHAR2(255),
  partition_stop    VARCHAR2(255),
  partition_id      INTEGER,
  other             LONG,
  other_xml         CLOB,
  .......
)
on commit preserve rows;

二、查阅资料

       ORA-00997 错误的原因是 Oracle 不允许在某些情况下直接使用 LONG 数据类型进行排序、分组或使用在 SELECT 子句中。LONG 类型是一种较旧的数据类型,它具有很多限制,因此 Oracle 推荐在新的开发中使用 CLOB(Character Large Object)或其他更现代的数据类型。

        话不多说,以下通过实验验证。

三、模拟做实验

3.1创建模拟表

create table feng_aa
(a long);

3.2执行语句,验证报错

create table feng_bb as select * from feng_aa;

结果报错:ORA-00997:非法使用long 类型。问题复现

3.3验证long类型 确认原因

(1)long类型-分组无法使用

    在 GROUP BY 子句中,使用了 LONG 类型的列而未正确处理。

select a from feng_aa group by a;

(2)long类型-排序无法使用

select * from feng_aa order by a;

  在 ORDER BY 子句中,使用了 LONG 类型的列而未正确处理。

(3)long类型-where判断无法使用

      在 WHERE 子句中,使用了 LONG 类型的列而未正确处理。

select * from feng_aa where a >1;

四、解决办法:

4.1修改字段类型:ok解决

      LONG 类型有很多限制,因此 Oracle 推荐在新的开发中使用 CLOB(Character Large Object)或其他更现代的数据类型。

alter table FENG_AA modify a clob;

执行成功:ok

     

4.2用到时转换为LONG :ok解决

  使用 TO_LOB 函数将 LONG 类型的列转换为 CLOB 或 BLOB 数据类型

create table feng_bb as select to_lob(a) a from feng_aa

执行结果:ok   

查看建表语句: 发现自动转为clob了。

create table FENG_BB
(
  a CLOB
)

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值