`

Oracle数据库创建Packge

阅读更多
--规则练习取任务

--类型
create or replace type RuleTask as Object (
   taskId varchar2(20),
   ruleTaskTip varchar2(200),
   ruleTaskName varchar2(200),
   ruleId varchar2(20),
   standardValue  varchar2(500),
   imageName   varchar2(200),
   ruleName varchar2(100)
);

create or replace type RuleTaskTable is table of RuleTask;

--包头
create or replace package Training_RULE_TASK_PACKAGE
is
      type  cur_rowA is ref cursor;

      function training_get_taskteam(v_user_id training_users_rule_info.user_id%TYPE)
                                     return training_users_rule_info.task_team%TYPE;

      -- '根据规则组合查询任务'
      function query_rule_task_userid(user_id in varchar2) return RuleTaskTable;

end Training_RULE_TASK_PACKAGE;

--包体
create or replace package body Training_RULE_TASK_PACKAGE
is
      --‘根据用户查询规则组合’
      FUNCTION training_get_taskteam(v_user_id training_users_rule_info.user_id%TYPE)
      RETURN training_users_rule_info.task_team%TYPE
      IS
             v_task_team  training_users_rule_info.task_team%TYPE;
           
      BEGIN

        
             SELECT task_team INTO v_task_team FROM training_users_rule_info ruleinfo
                                     WHERE ruleinfo.user_id =  v_user_id
                                           and
                                           ruleinfo.is_finished='N';
        
         RETURN v_task_team;

      END training_get_taskteam;

      -- '根据规则组合查询任务'
      FUNCTION query_rule_task_userid(user_id in varchar2) return RuleTaskTable
      is
                v_ruleTaskTable RuleTaskTable;---定义返回变量
             groupIds varchar2(500);
             groupId varchar2(20):='';
             num number :=0;
             total number := 0;
             list_index number := 1;
             v_row training_rule_task%rowtype;
             cur_row cur_rowA;
             ruleName varchar2(100);
            
      begin
              v_ruleTaskTable :=RuleTaskTable();--初始化嵌套表

           select Training_RULE_TASK_PACKAGE.training_get_taskteam(user_id) into groupIds from dual;
             total := length(groupIds)/8;
             while num<total loop
                 if num=0 then
                      select substr(groupIds,1,instr(groupIds,',',1,1)-1) into groupId from dual;
                     
                      open cur_row for select * from training_rule_task where rule_id =groupId order by task_id;
                      loop
                           fetch cur_row into v_row;
                           exit when cur_row%NOTFOUND;
                          
                           --根据任务的规则编号查询所属规则名称
                           select rule_name into ruleName from training_rule_table where rule_id = v_row.rule_id;
                          
                           --添加数据到集合
                           v_ruleTaskTable.extend;
                           v_ruleTaskTable(list_index) := RuleTask(v_row.task_id,v_row.rule_task_tip,v_row.rule_task_name,v_row.rule_id,v_row.standard_value,v_row.image_name,ruleName);
                           list_index := list_index+1;
                      end loop;
                      close cur_row;
                 elsif num>0 then
                        select substr(groupIds,instr(groupIds,',',1,num)+1,instr(groupIds,',',1,1)-1) into groupId from dual;
                        dbms_output.put_line(groupId);

                        open cur_row for select * from training_rule_task where rule_id =groupId order by task_id;
                        loop
                             fetch cur_row into v_row;
                             exit when cur_row%NOTFOUND;
                            
                             --根据任务的规则编号查询所属规则名称
                             select rule_name into ruleName from training_rule_table where rule_id = v_row.rule_id;
                             --添加数据到集合
                             v_ruleTaskTable.extend;
                             v_ruleTaskTable(list_index) := RuleTask(v_row.task_id,v_row.rule_task_tip,v_row.rule_task_name,v_row.rule_id,v_row.standard_value,v_row.image_name,ruleName);
                             list_index := list_index+1;
                        end loop;
                        close cur_row;
                   end if;
                     num:=num+1;
             end loop;
             return v_ruleTaskTable;
      end query_rule_task_userid;

end Training_RULE_TASK_PACKAGE;


--模拟作业取任务

--类型
create or replace type SimulantTask as Object (
    SIMULANT_TASK_ID  VARCHAR2(20),
    IMAGE_TEMPLATE_ID NUMBER(20),
    FIELD_CODE        VARCHAR2(100),
    STANDARD_VALUE    VARCHAR2(1000),
    IMAGE_SOURCE      VARCHAR2(200),
    BUSINESS_TYPE     VARCHAR2(20),
    FIELD_TYPE        VARCHAR2(2),
    FIELD_LEVEL       VARCHAR2(20),
    SIMULATE_TASK_TIP VARCHAR2(200),
    FIELD_ID          NUMBER(20),
    TYPE_RATE         NUMBER(10,2),
    LEVEL_RATE       NUMBER(10,2)
);

create or replace type SimulantTaskTable is table of SimulantTask;

--包头
create or replace package query_training_simulant_task
is

    function query_simulant_task(v_user_id varchar2)return SimulantTaskTable;

end query_training_simulant_task;


--包体
create or replace package body query_training_simulant_task
is

    function query_simulant_task(v_user_id varchar2)return SimulantTaskTable
    is
      v_business_type varchar2(300) := '';
      v_field_type varchar2(300) := '';
      v_field_level varchar2(300) := '';
      str varchar2(200) :='';
      num number :=0;
      total number := 0;
      tasknum number := 0;
      strsql varchar2(1000) := 'select * from (select * from training_simulant_task where (';
      type ref_cursor is ref cursor;
      v_cur ref_cursor;
      v_simulantTaskTable SimulantTaskTable;---定义返回变量
      v_row training_simulant_task%rowtype;
      list_index number := 1;
      type_rate number := 0;
      level_rate number := 0;
    begin
      select business_type into v_business_type from training_users_purview where user_id = v_user_id;
      select field_type into v_field_type from training_users_purview where user_id = v_user_id;
      select field_level into v_field_level from training_users_purview where user_id = v_user_id;
     
      v_simulantTaskTable := SimulantTaskTable();--初始化嵌套表
     
      if (v_business_type is not null) and (v_field_type is not null) and (v_field_level is not null) then
           
        if v_business_type!='-1' then

          total := length(v_business_type)/3;
          while num<total loop
                 if num=0 then
                    select substr(v_business_type,1,instr(v_business_type,',',1,1)-1) into str from dual;
                    strsql := strsql||' business_type = '||str;

                 elsif num>0 then
                    select substr(v_business_type,instr(v_business_type,',',1,num)+1,instr(v_business_type,',',1,1)-1) into str from dual;
                    strsql := strsql||' or business_type = '||str;
                 end if;

                 num:=num+1;
          end loop;

        else
         
          return v_simulantTaskTable;
        end if;

        if v_field_type!='-1' then
          num := 0;
          total := length(v_field_type)/3;
          while num<total loop
                 if num=0 then
                    select substr(v_field_type,1,instr(v_field_type,',',1,1)-1) into str from dual;
                    strsql := strsql||') and ( field_type = '||str;

                 elsif num>0 then
                    select substr(v_field_type,instr(v_field_type,',',1,num)+1,instr(v_field_type,',',1,1)-1) into str from dual;
                    strsql := strsql||' or field_type = '||str;
                 end if;

                 num:=num+1;
          end loop;

        else
         
          return v_simulantTaskTable;
        end if;

        if v_field_level!='-1' then
          str := v_field_level;
          select param_value into tasknum from training_task_param where training_task_param.param_description='任务数';
          strsql := strsql||') and field_level >= '||str||' order by dbms_random.value) task where rownum <= '||tasknum;
        else
          return v_simulantTaskTable;
        end if;
               
        strsql := strsql||' and field_code in (select field_code from training_field_template where field_code = task.field_code)
               and image_template_id in (select image_template_id from training_image_template where image_template_id = task.image_template_id)';
       
        open v_cur for strsql;

        loop
            fetch v_cur into v_row;
            exit when v_cur%NOTFOUND;
            --查询转换率
            select CHAR_CONVERT_RATE into type_rate from TRAINING_FIELD_TYPE where id = v_row.field_type;
            select CHAR_CONVERT_RATE into level_rate from TRAINING_FIELD_LEVEL where id = v_row.field_level;
           
            --添加数据
            v_simulantTaskTable.extend;
           
            v_simulantTaskTable(list_index) := SimulantTask(v_row.simulant_task_id,v_row.image_template_id,v_row.field_code,v_row.standard_value,v_row.image_source,v_row.business_type,v_row.field_type,v_row.field_level,v_row.simulate_task_tip,v_row.field_id,type_rate,level_rate);
            list_index := list_index+1;

        end loop;

        close v_cur;
       
      end if;

      return v_simulantTaskTable;

    end query_simulant_task;

end query_training_simulant_task;
分享到:
评论

相关推荐

    Oracle数据库Package

    创建Package的SQL语句如下: ```sql CREATE OR REPLACE PACKAGE 包名 AS -- 定义常量、变量、游标 常量名 CONSTANT 类型 := 初始值; 变量名 类型; -- 定义过程和函数 PROCEDURE 过程名 (参数列表); FUNCTION...

    Oracle中的package对象

    Oracle中的Package对象是一种独特的特性,它体现了Oracle数据库的面向对象编程理念。Package允许开发者像创建对象一样定义一组相关的过程、函数、类型以及全局变量,这些元素共享同一个命名空间,提高了代码的组织性...

    Linux上搭建Oracle数据库需要的各种package.zip

    以下是对"Linux上搭建Oracle数据库需要的各种package.zip"中包含的关键知识点的详细解释: 1. **Linux发行版选择**:Oracle数据库通常支持Red Hat Enterprise Linux (RHEL)或CentOS等企业级Linux发行版。这些系统...

    java连接oracle数据库

    本文将详细介绍使用Java连接Oracle数据库的过程,包括环境搭建、驱动配置以及基本的CRUD(创建、读取、更新、删除)操作。 #### 二、环境配置 1. **安装Oracle数据库**: - 首先确保已经安装了Oracle数据库,本文...

    Oracle数据库 资料学习

    **SQL基础**:Oracle数据库是基于SQL的,因此理解和熟练使用SQL语句是基础,包括SELECT用于查询数据,INSERT用于插入数据,UPDATE用于更新数据,DELETE用于删除数据,以及DDL(Data Definition Language)用于创建和...

    Oracle数据库课堂笔记

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,它在企业级应用中扮演着核心角色。以下是对Oracle数据库课堂笔记的详细解析,涵盖了从基础到进阶的重要知识点。 第一讲:Oracle简介 Oracle数据库是由甲骨...

    linux下安装oracle数据库大部分rpm包

    在Linux环境下安装Oracle数据库是一个复杂的过程,涉及到多个RPM(Red Hat Package Manager)包的配置与安装。Oracle数据库是一款强大的关系型数据库管理系统,被广泛应用于企业和组织的数据存储和管理。以下将详细...

    oracle数据库开发规范.pdf

    通过以上知识点,可以看出文档内容涉及到Oracle数据库的对象创建、SQL编写、PL/SQL编程、性能优化和事务管理等多个方面。这部分内容对Oracle数据库的开发和维护至关重要,为数据库管理员和开发人员提供了规范化的...

    linxu系统安装oracle数据库需要rpm包

    在Linux系统上安装Oracle数据库是一项复杂且细致的工作,涉及到多个步骤和依赖项。RPM(Red Hat Package Manager)包是Linux环境下广泛使用的软件管理工具,它可以帮助我们方便地安装、升级和管理软件。在安装Oracle...

    Oracle数据库课件

    Oracle数据库的配置包括初始化参数设置、表空间创建、用户和权限管理等。数据库管理员(DBA)需要监控性能、优化查询、备份恢复、安全管理等工作。Oracle提供了一系列工具,如SQL*Plus、Enterprise Manager Cloud ...

    Oracle数据库面试题及答案

    Oracle 数据库面试题及答案 Oracle 数据库是关系数据库管理系统的领导者,本文总结了常见的 Oracle 数据库面试题,旨在帮助尚在找工作的大蛱们。下面是详细的知识点解释: 1. 如何判断数据库的时区? 答案:SELECT...

    oracle jdbc diver package 正版

    Oracle JDBC Driver Package,简称为Oracle JDBC驱动包,是Oracle公司为Java开发者提供的用于与Oracle数据库进行交互的重要组件。这个正版的驱动包确保了开发者能够安全、高效地通过Java应用程序访问和操作Oracle...

    Oracle数据库视图管理

    - 在Oracle数据库中,可以通过使用`FORCE`选项来创建视图,即使基础表尚未创建也能实现。例如:`CREATE FORCE VIEW view_name AS SELECT * FROM table_name;` - 使用`FORCE`选项创建的视图初始状态为“无效”,当...

    oracle汉字转拼音package包-支持UTF8

    总的来说,这个"oracle汉字转拼音package包-支持UTF8"是一个非常实用的工具,可以帮助我们在Oracle数据库环境中有效地处理汉字到拼音的转换问题,尤其适用于处理UTF8编码的多语言数据。正确理解和使用这个Package,...

    Oracle 10g 手动创建数据库及实例

    ##### 步骤9:执行catproc创建package包 ```sql SQL&gt; @D:\oracle\product\10.1.0\db_1\rdbms\admin\catproc.sql ``` ##### 步骤10:执行pupbld ```sql SQL&gt; @D:\oracle\product\10.1.0\db_1\rdbms\admin\pupbld.sql...

    linux x86-64环境快速安装oracle数据库的指导手册

    ### Linux x86-64环境下Oracle数据库快速安装指南 #### 概述 在Linux x86-64操作系统上安装Oracle数据库是一项重要的任务,尤其是对于那些需要高性能、高可靠性的企业级应用而言。本指南旨在提供一个清晰、简洁的...

    Oracle至PostgreSQL数据库迁移方案.pptx

    它连接Oracle数据库,自动扫描并提取其结构或数据,然后生成可以加载到PostgreSQL数据库中的SQL脚本。 二、Ora2PG功能 Ora2PG可以支持大多数SQL的转换,但某些情况下仍需要人工校正语法,使其兼容PostgreSQL。其...

Global site tag (gtag.js) - Google Analytics