用sql语句选择oracle long raw的长度

时间:2015-02-20 08:42:54

标签: java oracle hibernate size bytearray

通过hibernate(使用postgresql或oracle 10g / 11g)属性存储filedata映射为

        <property name="fileData" type="binary">
            <column name="fileData" length="104857600" />
        </property>

从java应用程序我需要从db访问字段的长度(我不想加载整个对象,出于性能原因)。我没有找到任何hibernate(hql)解决方案来查询该信息,因此我决定搜索所使用的不同数据库的功能。对于postgresql我发现:

select BIT_LENGTH(filedata) from table

完美(并且速度惊人)。现在我需要类似的东西用于oracle。我已经尝试了

select utl_raw.length(filedata) from table

和     从表

中选择DBMS_LOB.GETLENGTH(filedata)

两者都会导致错误消息:

&#34;错误:ORA-00997:非法使用LONG数据类型&#34;

有没有可能在没有选择对象本身的情况下查询oracle db上的hibernate属性的长度?

(hibernate在oracle上创建一个&#34; long raw&#34;字段,在postgresql上创建&#34; bytea&#34;字段)

事先提前

(另外:语句将用于迁移上下文,新创建的filedata实体将以编程方式获取filesize属性)

1 个答案:

答案 0 :(得分:0)

好吧,看起来我在这里找到了答案: https://community.oracle.com/thread/2137593

create table temp_deleteme as select to_lob(<long raw field>) obj from <tablename>;
select dbms_lob.getlength(obj) from temp_deleteme;

创建tempTable后,我可以从中选择filedatalength,将其写入我的实体,然后再次删除该表。仍然不是很好的性能,但是让数据库完成工作,我不必将实体传输到我的服务器,只计算所需的信息。