现在需要做一个任务调度,请大家设计,满足以下需求
(1)任务可配置,比如可以配置PKG方法TEST_PROCEDURE(:1,:2...),可以是任意多个入参的方法,也可以没有入参
(2)每个方法的实际参数可配置,每次运行方法传进方法的相应参数值可能不一样(但参数个数是一样的)
(3)配置的任务可以隔一段时间执行一次,比如每隔N个小时,或者N天,或者N个月,或者N年
(4)(选做)考虑每个任务可以配置线程数,每次可以根据线程数启用相应的多任务进行调度(可使用JAVA)

----
--(1)任务可配置,比如可以配置PKG方法TEST_PROCEDURE(:1,:2...),可以是任意多个入参的方法,也可以没有入参
--(2)每个方法的实际参数可配置,每次运行方法传进方法的相应参数值可能不一样(但参数个数是一样的)
--(3)配置的任务可以隔一段时间执行一次,比如每隔N个小时,或者N天,或者N个月,或者N年
create table ma_schedue_task1(task_id varchar2(50),procedure_name varchar2(100),parameter_num number,param_freq number,freq_type varchar2(20),start_time date);
create table ma_schedue_param1(task_id varchar2(50),param_order number,param_value varchar2(100)); --create or replace procedure ma_add_task(i_table in varchar2 default 'MA_SCHEDUE_TASK',
-- i_col in varchar2)
--
-- is
declare
i_table varchar2(50) default 'MA_SCHEDUE_TASK1';
i_col varchar2(1000):= 'TEST_PROCEDURE(:1,:2,:3)';
i_parameter_number number:=3;
i_param_freq number :=2;
i_freq_type varchar2(20) :='daily';
i_start_time date default sysdate;
v_cur sys_refcursor;
v_sql varchar2(1000);
v_task_id varchar(32);
j number default 1;
i_param_value varchar2(500):='test1,test2,test3';
i_value varchar2(32);
j_value varchar2(32);
begin
v_sql:='insert into ma_schedue_task1 values (sys_guid(),:1,:2,:3,:4,:5) returning task_id into :task_id';
execute immediate v_sql
using i_col,i_parameter_number,i_param_freq,i_freq_type,i_start_time,out v_task_id;
dbms_output.put_line('i_col==' || i_col);
dbms_output.put_line('v_sql==' || v_sql);
dbms_output.put_line('v_task_id==' || v_task_id);
for i in 1..i_parameter_number loop
i_value:=','||i_param_value||',';
j_value:=substr(i_value,instr(i_value,',',1,j)+1,instr(i_value,',',1,j+1)-instr(i_value,',',1,j)-1);
insert into ma_schedue_param1
values(v_task_id,j,j_value);
j:=j+1;
end loop;
commit;
end;
/ create or replace procedure TEST_PROCEDURE(i_test1 in varchar2,
i_test2 in varchar2,
i_test3 in varchar2) is begin
dbms_output.put_line(i_test1 || i_test2||i_test3);
end TEST_PROCEDURE;
/ declare
cursor cur_task is
select * from ma_schedue_task1 where task_id ='2EDC5B378BDA1A87E053BD02A8C01B74';
v_sql varchar2(4000);
begin for v in cur_task loop
v_sql := ' begin execute immediate '' begin ' || v.procedure_name ||
' ; end;'' using ';
for param in (select r.param_value
from ma_schedue_param1 r
where r.task_id = v.task_id
order by param_order) loop
v_sql := v_sql || ' ''' || param.param_value || ''',';
end loop;
v_sql := rtrim(v_sql, ',') || '; end;'; dbms_output.put_line(v_sql);
execute immediate v_sql;
end loop;
end;
/

PL/SQL 训练06--字符串处理的更多相关文章

  1. PL/SQL 训练12--动态sql和绑定变量

    --什么是动态SQL?动态PL/SQL--动态SQL是指在运行时刻才构建执行的SQL语句--动态PL/SQL是指整个PL/SQL代码块都是动态构建,然后再编译执行 --动态SQL来可以用来干什么? - ...

  2. PL/SQL 训练11--包

    --所谓包,就是把一组PL/SQL的代码元素组织在一个命名空间下.--一种可以把程序或者其他的PL/SQL元素比如游标.类型.变量的组织结构在一起的结构(包括逻辑结构和物理结构)--包提供了非常重要的 ...

  3. PL/SQL 训练10--io及文件操作

    多数程序只需要通过SQL和底层数据库进行交互--有些情况,不可避免的还是会有一些场景,需要从PL/SQL给外部环境发送信息--或是从一些外部的源读入信息 --这节课介绍下面这些内置包 dbms_out ...

  4. PL/SQL 训练02--集合数组

    1. 请列举关联数组.嵌套表.VARRAY三种集合类型的区别区别:1 关联数组只能在plsql中使用,嵌套表,varray可用于sql中,数据库表中的列2 嵌套表,varray必须在使用的时候初始化, ...

  5. PL/SQL 训练01--基础介绍

    --开始介绍变量之前,我们先看下怎么在PLSQL写程序,如下我们写了一个块 declare --声明部分,声明变量 v_name ) :='hello world'; begin --执行区域 dbm ...

  6. pl/sql programming 06 异常处理

    如果 PLSQL发生了错误, 无论是系统错误还是应用错误, 都会抛出一个异常, 当前 PL/SQL 块中执行单元会暂停处理, 如果当前块有一个异常处理单元的话, 控制会转移到当前块的异常处理单元来处理 ...

  7. PL/SQL 训练13--plsql 优化

    --数据缓存技术 --PGA和SGA---SGA:系统全局区域--PGA:Process Global Area是为每个连接到Oracle的用户进程保留的内存. ---PLSQL从PGA获取信息的速度 ...

  8. PL/SQL 训练08--触发器

    --什么是触发器呢?--一触即发,某个事件发生时,执行的程序块?--数据库触发器是一个当数据库发生某种事件时作为对这个事件的响应而执行的一个被命名的程序单元 --适合场景--对表的修改做验证--数据库 ...

  9. PL/SQL 训练05--游标

    --隐式游标--通过一个简单的SELECT ...INTO 语句提取一行数据,并放在一个局部变量中,最简单获取数据的途径 --显示游标--可以在声明单元明确的声明一个查询,这样可以在一个或多个程序中打 ...

  10. PL/SQL 训练04--事务

    --pl/sql通过SQL和ORACLE数据库紧密的整合在一起--在pl/sql中可以执行任何操作语句(DML语句),包括INSERT,UPDATE,DELETE,MERGE,也包括查询语句--可否执 ...

随机推荐

  1. define用于条件编译

    格式: #ifndef _test.h_ //这里放不想被重复包含的代码 #define _test.h_ #endif define用于条件编译的意思是不想让头文件重复编译,头文件重复编译会造成的结 ...

  2. 关于绑定的C#代码+转换器

    BindingOperations.SetBinding(                exp, Expander.IsExpandedProperty,                new Bi ...

  3. requirejs打包项目

    例子: https://github.com/AinneShen/requirejsExample 用requirejs为js和css添加版本,项目共用同一个config

  4. 各种WEB服务器自带的默认Servlet名称

    Tomcat, Jetty, JBoss, and GlassFish 自带的默认Servlet的名字 -- "default" Google App Engine 自带的 默认S ...

  5. Python之virtualenv沙盒环境

    在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4.所有第三方的包都会被pip安装到Python3的site-packages目录下. 如果我们要同时开发多个应用程序,那这 ...

  6. Node——用http-proxy 做反向代理服务器

    时下不少场景,都是申请一个 VPS 主机来托管运行 Web 项目的,小弟我也不例外——购买了一个小型的 CentOS VPS 使用着.在使用的过程中,面临一个问题,就是同一类型的服务端环境还好——但如 ...

  7. 版本工具管理之----git

    如何查看隐藏文件夹: 如果你看不到.git目录,你需要让隐藏的文件可见.具体做法就是打开一个Terminal窗口,输入以下命令: defaults write com.apple.finder App ...

  8. WEKA运行参数修改(RunWeka.ini文件)

    一般使用weka进行数据挖掘的时候会碰到两个问题,一是内存不够,二是libsvm使用不了,这时就需要重新配置RunWeka.ini文件,解决上述问题.查看RunWeka.ini原文如下: # Cont ...

  9. jQuery 绑定事件总结

    目前已知有: $("..").bind("事件名",fn); $("parent").on("事件名","se ...

  10. golang日期转字符串,仿照C#中的日期格式结构体

    1.日期格式集合.日期转字符串方法 package util import ( "strings" "time" ) //日期格式:模仿java中的结构体 ty ...