现在需要做一个任务调度,请大家设计,满足以下需求
(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. poj3683 2 -sat输出路径

    tarjan缩点,拓扑排序染色输出(貌似挑战上面没有拓扑啊,而且这样写还过了= =) 主要是找s,t,d,三者之间的关系,找出合取范式这题就很容易了 #include<map> #incl ...

  2. vue-cli favicon 怎么引入

    把你的 favicon 图标放到 static 目录下,然后修改 link 标签指向 static 目录下的 favicon 图标文件即可

  3. 014对象——对象 __isset __unset __sleep __wakeup

    <?php /** * */ /*class lantian { public $name; public $age; private $money; public $c; function _ ...

  4. winform 中 MessageBox 用法大全

    (转自:http://blog.csdn.net/xuenzhen123/article/details/4808005) MessageBox.Show()共有21中重载方法.现将其常见用法总结如下 ...

  5. LeetCode OJ:Evaluate Reverse Polish Notation(逆波兰表示法的计算器)

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  6. 【python】利用h5py存储数据

    两类容器:group & dataset group类似文件夹,字典. dataset是数据集,类似数组 支持更多的对外透明的存储特征,数据压缩,误差检测,分块传输 group下面可以是gro ...

  7. xhtml html

    xhtml是用xml语言重写了html,相比html更规范了, XHTML是HTML像XML的一个过渡语言,它比HTML严谨性会高点,然后基本语言都还是沿用的HTML的标签,只不过废除了部分表现层的标 ...

  8. 旧书重温:0day2【5】shellcode变形记

    紧接上一篇,结合第一篇 //这篇文章主要成功溢出一个带有缓冲区溢出的小程序,其中我们的shellcode被strcpy截断了所以我们需要变形shellcode,这个实验中也出现了很多意想不到的拦路虎, ...

  9. HDU - 6096 :String (AC自动机,已知前后缀,匹配单词,弱数据)

    Bob has a dictionary with N words in it. Now there is a list of words in which the middle part of th ...

  10. 洛谷P1306 斐波那契公约数

    题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? 输入输出格式 输入格式: 两个正整 ...