设为首页 收藏本站
查看: 592|回复: 0

[经验分享] ORACLE function方法学习

[复制链接]

尚未签到

发表于 2016-7-21 10:11:03 | 显示全部楼层 |阅读模式
获取组织机构代码,以'a','b'...形式返回
比如:若为211241003  返回: '211241003','211241','211200','210000'
            211241   返回:'211241','211200','210000'
            211200   返回:'211200','210000'
            210000   返回:'210000'

CREATE OR REPLACE FUNCTION GET_PARENT_ORGCODE(in_code IN VARCHAR2)
RETURN VARCHAR2
deterministic
is
-- 返回值
orgcodelist VARCHAR2(128);
orgCode     varchar2(20);
counter     integer;
CURSOR cur_parentorg IS
select org_registry
from (select a.code, b.org_registry
from up_org_unit_ext b, up_org_unit a
where b.id = a.id
and length(a.code) != 6
union
select b.code, substr(b.code, 0, 4) || '00'
from up_org_unit b
where length(b.code) = 6
and substr(b.code, 5, 2) != 00
/*
select b.org_registry, substr(b.org_registry, 0, 4) || '00'
from up_org_unit_ext b
where length(b.org_registry) = 6
and substr(b.org_registry, 5, 2) != 00
*/
union
select b.org_registry, '210000'
from up_org_unit_ext b
where length(b.org_registry) = 6
and substr(b.org_registry, 5, 2) = '00'
) c
start with c.code = in_code
connect by nocycle prior c.org_registry = c.code;
BEGIN
counter     := 0;
orgcodelist := '';
-- 打开游标
OPEN cur_parentorg;
LOOP
FETCH cur_parentorg
INTO orgcode;
EXIT WHEN cur_parentorg%NOTFOUND;
orgcodelist := orgcodelist || '''' || orgcode || ''',';
counter     := counter + 1;
END LOOP;
CLOSE cur_parentorg;
if (counter = 2 and length(in_code) = 9) then
orgcodelist := '''' || in_code || ''',' || '''' ||
substr(in_code, 0, 6) || ''',' || orgcodelist;
else
orgcodelist := '''' || in_code || ''',' || orgcodelist;
end if;
orgcodelist := substr(orgcodelist, 0, length(orgcodelist) - 1);
return orgcodelist;
EXCEPTION
WHEN OTHERS THEN
return 'error';
END GET_PARENT_ORGCODE;

SQL调用

select * from t_reg_mcjbxxyw a where a.namestatu='01'
and  instr(get_parent_orgcode('211241004'),a.accunit) > 0
and a.saveperto > sysdate;

Java 后台调用

public List<BusNamBasic> querXXXName(final BusNamBasic busNamBasic, final String flag, final String accUnit, final int pageNum, final int pageSize) {
return this.getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)throws HibernateException, SQLException {
List<Object> params = new ArrayList<Object>();
StringBuffer sql = new StringBuffer();
sql.append(" SELECT * FROM T_REG_MCJBXXYW WHERE NAMESTATU = '01' ");
if (StringUtils.isNotBlank(accUnit)) {
sql.append("       AND INSTR(GET_PARENT_ORGCODE(?),ACCUNIT) > 0 ");
params.add(accUnit);
}
if ("0".equals(flag) && StringUtils.isNotBlank(busNamBasic.getEntname())) {
sql.append("       AND ENTNAME = ? ");
params.add(busNamBasic.getEntname());
}
if ("1".equals(flag) && StringUtils.isNotBlank(busNamBasic.getEntname())) {
sql.append("       AND ENTNAME like ? ");
params.add("%" + busNamBasic.getEntname() + "%");
}
if (StringUtils.isNotBlank(busNamBasic.getNotno())) {
sql.append("       AND NOTNO = ? ");
params.add(busNamBasic.getNotno());
}
sql.append("  AND SAVEPERTO > SYSDATE ");
sql.append("  ORDER BY SAVEPERTO");
Query query = (SQLQuery) session.createSQLQuery(sql.toString())
.addScalar("mcjbxxywseq", Hibernate.LONG)
.addScalar("zcdjywseq", Hibernate.STRING)
.addScalar("pripid", Hibernate.STRING)
.addScalar("entname", Hibernate.STRING)
.addScalar("namedistrict", Hibernate.STRING)
.addScalar("apprdate", Hibernate.DATE)
.addScalar("alttime", Hibernate.INTEGER)
.setResultTransformer(Transformers.aliasToBean(BusNamBasic.class));
for (int i = 0; i < params.size(); i++) {
query.setParameter(i, params.get(i));
}
if(pageSize>0){
query.setMaxResults(pageSize);
query.setFirstResult((pageNum-1)*pageSize);
}
return query.list();
}
});
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-247259-1-1.html 上篇帖子: Oracle中使用rank()over() 下篇帖子: ORACLE PROCEDURE存储过程学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表