oracle多数转换

spi*_*er8 2 sql oracle oracle10g

我试图从all_tab_partitions表中获取当前分区的名称.当我尝试比较high_value(长数据类型)和数字.它抛出一个错误:

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

SELECT PARTITION_NAME, HIGH_VALUE FROM ALL_TAB_PARTITIONS
WHERE TABLE_OWNER='SCHEMA_NAM'
AND TABLE_NAME='TABLE_NAME'
AND HIGH_VALUE>to_number(TO_CHAR(TRUNC(ADD_MONTHS(SYSDATE, 1), 'MONTH'), 'YYYYDDD'))
/
Run Code Online (Sandbox Code Playgroud)

Pet*_*byl 6

长类型存储大变量长度字符串,它不是数字类型.它有很多局限性.Oracle文档说:

使用LONG值受以下限制:

  • 一个表只能包含一个LONG列.
  • 您无法创建具有LONG属性的对象类型.
  • LONG列不能出现在WHERE或完整性约束中(除了它们可以出现在和NOT NULL约束中).
  • LONG列无法编入索引.
  • LONG无法在正则表达式中指定.
  • 存储的函数返回LONG值.
  • 您可以使用LONG数据类型声明PL/SQL程序单元的变量或参数.但是,您无法从SQL调用程序单元.
  • 在单个SQL语句中,LONG列,更新表和锁定表必须位于同一数据库中.LONG和LONG RAW列不能在分布式SQL语句中使用,也不能复制.
  • 如果表同时具有LONG和LOB列,则不能将超过4000个字节的数据绑定到同一SQL语句中的LONG和LOB列.但是,您可以将超过4000个字节的数据绑定到LONG或LOB列.


Bob*_*ica 5

为了检查或使用 LONG 列的值,您必须编写一些 PL/SQL,类似于

DECLARE
  strHigh_value  VARCHAR2(4000);
BEGIN
  FOR aRow IN (SELECT PARTITION_NAME, HIGH_VALUE
                 FROM ALL_TAB_PARTITIONS
                 WHERE TABLE_OWNER = 'SCHEMA_NAM' AND
                       TABLE_NAME = 'TABLE_NAME')
  LOOP
    strHigh_value := aRow.HIGH_VALUE;

    -- TODO: Manipulate strHigh_value in whatever manner you need

  END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)

分享和享受。