配置环境变量 nls_lang值如下:(使客户端字符集和服务器端一致)
select
t1.value||'_'||t2.VALUE||'.'||t3.VALUE AS Server
FROM nls_database_parameters t1,nls_database_parameters t2,nls_database_parameters t3
WHERE t1.PARAMETER='NLS_LANGUAGE'
AND t2.PARAMETER='NLS_TERRITORY'
AND t3.PARAMETER='NLS_CHARACTERSET'
oracle数据库实现全文检索
既然表1是末级数据,那么可以从这个数据中截取出上级的代码,可以先截取,形成新的视图,然后再利用rollup分组,最后在和b表关联,就能得到C了。
类似:select acc_1,acc_2,acc_3,acc_4,acc_5,acc_code,sum(qmjf)(select substr(acc_code,1,4) acc_1,substr(acc_code,1,7) acc_2,substr(acc_code,1,9) acc_3,substr(acc_code,1,11)acc_4,substr(acc_code,1,13) acc_5,acc_code,qmjf from 表1) a group by rollup(acc_code,acc_5,acc_4,acc_3,acc_2,acc_1)
直接用截取分组应该也可以,不过这个就要去尝试了,我这里没有环境测试啊,这个就要靠你自己了。上面的语句也不一定对(比如如果没有5002,那么acc_1那个不截取也可以),我只是写个意思啊。
至于页面上的显示,java判断一下,acc_5有内容就显示这个,要么就判断acc_4,然后一直判断到acc_1。
如果非要展示在一列里面,那么只能是分别查询然后union all了。
类似:
select substr(acc_code,1,4),sum(qmjf) from table group by substr(acc_code,1,4)
union all
select substr(acc_code,1,7),sum(qmjf) from table group by substr(acc_code,1,7)
union all
。。。。。。写完你需要的
然后再去关联B表,或者写的时候直接写上。不过这个要group by N遍表。估计执行计划会吓死人的。虽然上一个也不怎么样,但是好歹是一个语句。
Oracle全文检索配置方法:
1.检查数据库是否具有全文检索功能(这是针对已经建成使用的数据库)
查看用户中是否存在ctxsys用户,查询角色里是否存在ctxapp角色。以上两个中的1个不满足(不存在),则说明没有装过全文检索功能。
使用contains函数的时候,若没有全文检索则会报错的。
2.若没有,则需要手动建立,先建立全文检索要使用的空间
sqlplus / as sysdba ?--进入控制台
create?tablespace?Idx_ctxsys?datafile?'/oradata/sg186fx/ctxsys01.dbf?size?10240M?autoextend?on?next?32M?maxsize?20480M;--创建全文检索使用的表空间3.创建全文检索使用的用户和角色及相应的包,则需要执行oracle自带的一个脚本:cd $ORACLE_HOME/ctx/admin/catctx.sql
还是在sqlplus中执行:
@?/ctx/admin/catctx.sql ctxsys Idx_ctxsys temp nolock
在执行这个脚本的时候,输入了几个参数,第一个参数ctxsys为ctxsys用户的密码
第二个参数Idx_ctxsys为ctxsys用户要使用的表空间
第三个参数temp为ctxsys用户使用的临时表空间
第四个参数nolock为ctxsys用户处于解锁状态。
4.创建完成后,要登录ctxsys用户
connect ctxsys/ctxsys
执行以下脚本:@?/ctx/admin/defaults/drdefus.sql(这是个很重要的脚本,后面创建索引会使用该脚本创建的信息)
5.创建全文索引语法分析器
先要明确使用全文索引的用户,我要使用全文索引的是sgpm用户
因此
grant?execute?on?ctxsys.ctx_ddl?to?sgpm?with?grant?option;connect sgpm/sgpm
设置语法分析器:
exec?ctx_ddl.drop_preference('chinalexer');exec?ctx_ddl.create_preference('chinalexer','chinese_lexer');
设置词法属性:
exec?ctx_ddl.drop_preference('idx_c_store');beginctx_ddl.create_preference('idx_c_store','BASIC_STORAGE');
ctx_ddl.set_attribut('idx_c_store','I_TABLE_CLAUSE','tablespaces?Idx_ctxsy');
ctx_ddl.set_attribute('idx_c_store','I_INDEX_CLAUSE','tablespace?Idx_ctxsy?compress?2');
end;
/
6.创建索引
create?index?sgpm.idx_c_cons_name?on?sgpm.c_cons(cons_name)?indextype?is?ctxsys.context?parameters('lexer?chinalexer?storage?idx_c_store');7.同步索引
variable?jobno?number;begin
dbms_job.submit(:jobno,'pkg_sp_tools.p_cont_sys_index();',sysdate,'trunc(sysdate)+19/24+1');?--执行的是个性化方法。
end;
/
普通的就是用:?
exec?ctx_ddl.sync_index('idx_c_cons_name');到此,全文检索创建成功,contains函数就可以正常使用了。
注意:创建的过程中会出现ORA-29879:cannot create multiple domain index on a column listusing same indextype ,这说明在其他用户下已经建立了该索引。
本文来自作者[怀爱棋]投稿,不代表博利网立场,如若转载,请注明出处:https://wap.boliduo.cc/bl/1627.html
评论列表(4条)
我是博利网的签约作者“怀爱棋”!
希望本篇文章《c#查询oracle表(US7ASCII字符集)时汉字出现乱码?》能对你有所帮助!
本站[博利网]内容主要涵盖:生活百科,小常识,生活小窍门,知识分享
本文概览:配置环境变量 nls_lang值如下:(使客户端字符集和服务器端一致)select t1.value||'_'||t2.VALUE||'.'||t3.VALUE...