zoukankan      html  css  js  c++  java
  • oracel动态sql实例

    CREATE OR REPLACE FUNCTION f_lf_find_organise(
           organise_id in varchar2,
           column_name in varchar2,
           level_in in number)
      /************************************************************************
         函数名称:f_lf_find_organise
         输入参数:organise_id 组织机构ID
                   column_name 想要查询返回出的列,如果为空默认返回的是organise_name这一列
                   level_in 想要查询的组织机构级别,如果为空默认查询id本身的信息.
         返回参数:返回查询出的column_name这一列的值。
                   如果传入的层级level_in多于organise_id这个组织的层级,那么返回-2
                   如果出现异常,或者organise_id为空,那么返回-1
         功能描述:根据组织机构的ID,查询出该组织几个第level_in层级的column_name字段的值
         处理原则:根据organise_code去查询相应的数据
         ---------------------------------------------------------------------
         版本:    V1.0.0
         创建人:      李峰(lifeng):396442668@qq.com
         创建日期:    2012-11-02
         修改历史:
                      2012-11-08
                      如果传入level_in为空时,现在默认返回其本身的信息
       ************************************************************************/

      return varchar2 is
      str_sql varchar2(800);
      str_column_name varchar2(50);
      num_level number;
      num_index number;
      str_tmp varchar2(1000);
    begin
       if organise_id is null then
          return '-1';
       end if;
       str_tmp := '-1';
       str_column_name := column_name;
       if column_name is null then
          str_column_name := 'organise_name';
       end if;
       -- 默认查询ID本身的信息
       if level_in is null then
         str_sql := 'select ' || str_column_name || ' from sys_organise_info oi where oi.organise_id = :p0';
         execute immediate str_sql into str_tmp using organise_id;
         return str_tmp;
       else
          num_level := level_in;
       end if;
       num_index := 4 * num_level;
       str_sql := 'select ' || str_column_name || '
                     from sys_organise_info a
                    where a.organise_code = (select subStr(organise_code,0,:p1)
                                               from sys_organise_info b
                                              where b.organise_id = :p2
                                                and length(b.organise_code) >= :p3)';
       execute immediate str_sql into str_tmp using num_index,organise_id,num_index;
       return str_tmp;
    exception
      when No_data_found then
        return '-2';
      when others then
      dbms_output.put_line(sqlerrm || 'sql = ' || str_sql);
      return '-1';
    end f_lf_find_organise;

  • 相关阅读:
    MySQL Online DDL导致全局锁表案例分析
    .NET Core教程--给API加一个服务端缓存啦
    任务队列和异步接口的正确打开方式(.NET Core版本)
    .NET Core中使用RabbitMQ正确方式
    .NET Core单元测试之搞死开发的覆盖率统计(coverlet + ReportGenerator )
    没有执行过rm -rf /*的开发不是好运维
    dotnet core在Task中使用依赖注入的Service/EFContext
    可能是全网首个支持阿里云Elasticsearch Xapck鉴权的Skywalking
    dpdk中QSBR具体实现
    C语言二级指针底层实现
  • 原文地址:https://www.cnblogs.com/working/p/2918949.html
Copyright © 2011-2022 走看看