gpt4 book ai didi

oracle - Grails中与众不同,oracle和CLOB错误

转载 作者:行者123 更新时间:2023-12-02 16:00:24 24 4
gpt4 key购买 nike

我有一个用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)

到目前为止,到目前为止还不错,但是现在我需要在oracle中包括一些CLOB列以扩展VarChar 4000中的某些字段。这样做时,由于Oracle无法比较CLOB列的问题,这些查询停止了工作。

错误:

ORA-00932: inconsistent datatypes: expected - got CLOB



我知道Grails / Hibernate使用域类的所有属性来使sql发送到数据库并作为该类的实例返回。
这种情况是,我只需要比较或分组域类的ID即可使其与众不同,但我需要将结果作为该类的实例而不是ID,因此不需要更改所有查询。

即使我需要自定义一种方言来捕获Hibernate在SQL中转换HQL所做的工作,你们中的任何人都知道一种更改HQL中独特行为的方法吗?

我在想的是捕获SQL,将其更改为返回并仅将实例的ID分组,并在Domain类中执行“获取”,然后再将其返回给“executeQuery”。

最佳答案

该解决方案仅适合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;

关于oracle - Grails中与众不同,oracle和CLOB错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31777422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com