当前位置: 首页 > 知识库问答 >
问题:

Grails中distinct、oracle和CLOB的错误

端木狐若
2023-03-14

我有一个用grails 2.2.5编写的应用程序,它需要与MySQL、Oracle和SQL Server连接,这取决于我的客户。我们有1000多个查询使用不同的类返回实例。

示例:

import br.com.aaf.auditoria.*

def query="select distinct tipo from Atividade c join c.tipoAtividade tipo order by tipo.nome"

def ret=Atividade.executeQuery(query)

ORA-00932:不一致的数据类型:预期的-得到的CLOB

我知道Grails/Hibernate使用domain类的所有属性将sql发送到数据库,并作为该类的实例返回。这种情况是,我只需要比较或分组域类的id,就可以创建一个distinct类,但是我需要结果是类的实例,而不是id,所以我不需要更改所有的查询。

如果我需要定制一个方言来捕捉Hibernate在SQL中转换HQL时所做的事情,那么您是否知道一种方法来更改HQL中distinct的行为?

共有1个答案

太叔繁
2023-03-14

该解决方案只适用于oracle DB。您必须为架构授予某些特权。“创建类型”和“在dbms_crypto上执行

create table clob_test (id number, lob clob);

insert all 
  into clob_test values(1,'AAAAAAAA')
  into clob_test values (2,'AAAAAAAA')
  into clob_test values(3,'BBBBBBBB')
  into clob_test values(4,'BBBBBBBB')
  select * from dual;
commit;

CREATE OR REPLACE 
type wrap_lob as object(
  lob clob,
  MAP MEMBER FUNCTION get_hash RETURN RAW
)
;
/

CREATE OR REPLACE 
TYPE BODY wrap_lob is

  MAP MEMBER FUNCTION get_hash RETURN RAW is
  begin
    return DBMS_CRYPTO.HASH(lob,1);
  end;
end;
/


select tab.dist_lob.lob from (select distinct wrap_lob(lob) dist_lob from clob_test) tab;
 类似资料:
  • 问题内容: 我试图将一个超过4000个字符的值写入Oracle Clob字段。这似乎是一个普遍的问题,但是似乎没有解决方案可以奏效。所以我从这里祈祷寻求帮助。 故障和肮脏的信息:使用Oracle 9.2.0.8.0 Hibernate3实现带有注释 Tomcat的pojo Tomcat 6.0.16 Oracle 10.2.x驱动程序 C3P0连接池提供程序 在我的persistence.xml中

  • 使用java和jmstemplate,我试图用包含CLOB字段的有效负载将消息编入oracle队列。 我的问题是你是怎么做这种事的?在谷歌上,有各种各样的建议表明我必须: 用空加载对消息进行排队 使用步骤1中创建的消息id从队列表中检索usr_data 将clob写入队列表。 约安。

  • 主要内容:Oracle SELECT DISTINCT语句简介,Oracle DISTINCT示例在本教程中将学习如何使用Oracle 语句从表中查询不同(过滤相同值)的数据。 Oracle SELECT DISTINCT语句简介 在SELECT语句中使用子句来过滤结果集中的重复行。它确保在子句中返回指定的一列或多列的值是唯一的。 以下说明了语句的语法: 在上面语法中,表的列中的值将进行比较以过滤重复项。 要根据多列检索唯一数据,只需要在子句中指定列的列表,如下所示: 在此语法中,,和中的值的

  • 你知道怎么解决这个问题吗?它来自Oracle端(我对此表示怀疑)还是来自SAS端(但有什么变化?) 谢谢你的帮助,我希望我已经给你提供了足够的信息

  • 问题内容: 我有一张带有Clob列的表。需要执行基于Clob列内容的搜索。然而 失败但 似乎很好。oracle如何处理Clob列上的过滤。它仅支持’like’子句,不支持=,!=等。是否与其他数据库(如mysql,postgres等)相同 另外,在像Hibernate这样的实现JPA的框架中如何处理这种情况? 问题答案: 是的,这是不允许的(此限制不影响S IN PL / SQL比较)采用比较运营

  • 我知道我可以添加函数/存储proc来完成这项工作。性能方面非常重要,所以我问是否有一种方法可以通过直接将数据推入CLOB来克服32K的限制。