`

ORACLE function方法学习

阅读更多
获取组织机构代码,以'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();
	        }
	    });
    }
分享到:
评论

相关推荐

    Oracle基础学习三过程PROCEDURE 和函数FUNCTION 的创建及用

    Oracle数据库是世界上最流行的关系型数据库管理系统之一,它提供了丰富的编程元素来实现复杂的业务逻辑,如过程(PROCEDURE)和函数(FUNCTION)。在本教程中,我们将深入探讨如何在Oracle中创建、调用以及删除这两...

    oracle 分析函数学习笔记

    在描述中提到的场景中,有几种不同的方法可以实现数据统计,包括通过程序处理、使用临时表和包、标准SQL的UNION以及Oracle特有的分析函数。每种方法都有其优缺点。例如,程序处理方法与数据库无关,但增加了开发工作...

    Oracle 10g 学习笔记

    这个笔记是学习oracle数据库过程中整理出来的,比较详细,适合于初学者。 │ oracle与tomcat端口冲突.txt │ Oracle学习笔记.pdf │ Oracle学习笔记.wps │ 安装Oracle后myEclipse不能正常使用.txt │ 手工配置...

    oracle 存储过程学习

    ### Oracle 存储过程与函数详解 #### 6.1 引言 Oracle数据库中的存储过程和函数是PL/SQL编程的重要组成部分。它们是数据库中存储的命名块,可以...熟练掌握这两种工具的创建和使用方法对于Oracle开发者来说至关重要。

    Oracle_function.zip_oracle

    本资料"Oracle_function.zip_oracle"包含的"Oracle_function.chm"帮助手册正是为了解析和理解Oracle中的各种函数而准备的。 首先,我们要明白函数是预定义的代码块,可以接受一个或多个输入(参数),执行特定操作...

    oracle-function--api.zip_oracle_oracle API_oracle sql api

    “oracle function api.chm”文件很可能是Oracle函数的离线帮助文档,通常包含了详细的函数说明、参数列表、示例和返回值等信息,是学习和查阅Oracle API的重要资源。 总结,Oracle的函数和API为开发者提供了强大的...

    Oracle 存储过程学习文档

    以上内容详细介绍了Oracle存储过程的相关知识点,包括其概念、优点、创建和调用方法、存储函数、包的概念及其使用示例。通过这些知识点的学习,可以更好地理解和掌握Oracle存储过程的应用技巧,从而提高数据库应用...

    Oracle Function

    该压缩包 基本包含了 Oracle中的所有函数 对于学习Oracle很有帮助的 我觉得!

    ORACLE函数大全

    这份"ORACLE函数大全"文档无疑为学习和使用Oracle数据库的用户提供了宝贵的资源。下面,我们将深入探讨Oracle函数的各个方面。 1. **数据类型转换函数**: - `TO_CHAR()`:将数值或日期转换为字符串格式。 - `TO_...

    oracle 数据库 SQL学习笔记

    在Oracle SQL的学习过程中,有许多关键知识点需要掌握,这些知识点将帮助你有效地操作和管理Oracle数据库。 首先,了解SQL的基础语法是至关重要的。这包括数据查询、插入、更新和删除操作,即DQL(Data Query ...

    Oracle_SQL_function.rar_oracle

    本资料“Oracle_SQL_function”主要聚焦于Oracle中的常用函数及其使用方法,旨在帮助用户更好地理解和掌握在Oracle环境中进行SQL操作。 一、字符串函数 1. CONCAT():用于连接两个或更多字符串。例如,CONCAT('...

    Oracle学习第七章

    在Oracle学习的第七章中,我们将深入探讨两个关键概念:子程序和程序包,这些都是数据库开发和管理中的重要组成部分。 首先,让我们了解什么是子程序。在Oracle中,子程序包括过程(Procedure)和函数(Function)...

    oracle上课学习笔记

    Oracle数据库是世界上最广泛使用的数据库管理系统之一,用于...以上就是Oracle数据库学习笔记中涉及的主要知识点,对于理解和操作Oracle数据库至关重要。深入理解和掌握这些概念,将有助于你成为更优秀的数据库管理员。

    oracle学习之函数存储过程

    ### Oracle学习之函数与存储过程详解 #### 一、函数的定义及应用 函数在Oracle中主要用于执行特定的计算或逻辑处理,并返回一个结果。它们是数据库编程中的重要组成部分,可以提高代码的重用性和可维护性。 #####...

    oracle_function_decode.patch

    博客:PostgreSQL的学习心得和知识总结(四十四)|语法级自上而下完美实现Oracle数据库DECODE函数的实现方案(GreenPlum & AntDB)

    大型项目Oracle sql,function,procedures,package,cursor,job

    学习这个包的内容,将帮助你理解和掌握如何在实际的大型项目中有效地使用Oracle数据库进行开发和维护。理解并熟练运用这些知识点,对于提升数据库管理和编程能力,解决复杂业务问题,优化系统性能等方面都有极大的...

    学习oracle练习sql脚本.zip

    9. 存储过程(PROCEDURE)和函数(FUNCTION):学习编写和调用存储过程和函数,以封装复杂的业务逻辑。 10. 权限和角色(GRANT和REVOKE):了解如何分配和撤销用户对数据库对象的访问权限,理解角色的概念。 11. ...

    oracle经典的学习ppt

    这份"Oracle经典的学习PPT"涵盖了对PL/SQL的全面学习,对于想要深入理解Oracle数据库和提升数据库编程能力的人来说,是一份宝贵的学习资源。 在Oracle的PL/SQL学习中,我们首先要了解它的基本结构和语法。PL/SQL由...

    Oracle-SQL-function.rar_oracle_oracle ppt

    本资料“Oracle SQL function.ppt”将深入探讨Oracle SQL中的函数及其应用。 1. **SQL基础** - SQL是用于处理关系数据库的标准语言,包括查询、插入、更新和删除数据。 - 在Oracle SQL中,函数是用来处理或转换...

    oracle 10g 学习

    在Oracle 10g中,你可以使用CREATE PROCEDURE和CREATE FUNCTION来创建它们。 9. **触发器**:触发器是自动执行的数据库对象,响应特定的数据库事件,如INSERT、UPDATE或DELETE操作。它们可以用来实现业务规则或数据...

Global site tag (gtag.js) - Google Analytics