PL/SQL 训练06--字符串处理
现在需要做一个任务调度,请大家设计,满足以下需求
(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--字符串处理的更多相关文章
- PL/SQL 训练12--动态sql和绑定变量
--什么是动态SQL?动态PL/SQL--动态SQL是指在运行时刻才构建执行的SQL语句--动态PL/SQL是指整个PL/SQL代码块都是动态构建,然后再编译执行 --动态SQL来可以用来干什么? - ...
- PL/SQL 训练11--包
--所谓包,就是把一组PL/SQL的代码元素组织在一个命名空间下.--一种可以把程序或者其他的PL/SQL元素比如游标.类型.变量的组织结构在一起的结构(包括逻辑结构和物理结构)--包提供了非常重要的 ...
- PL/SQL 训练10--io及文件操作
多数程序只需要通过SQL和底层数据库进行交互--有些情况,不可避免的还是会有一些场景,需要从PL/SQL给外部环境发送信息--或是从一些外部的源读入信息 --这节课介绍下面这些内置包 dbms_out ...
- PL/SQL 训练02--集合数组
1. 请列举关联数组.嵌套表.VARRAY三种集合类型的区别区别:1 关联数组只能在plsql中使用,嵌套表,varray可用于sql中,数据库表中的列2 嵌套表,varray必须在使用的时候初始化, ...
- PL/SQL 训练01--基础介绍
--开始介绍变量之前,我们先看下怎么在PLSQL写程序,如下我们写了一个块 declare --声明部分,声明变量 v_name ) :='hello world'; begin --执行区域 dbm ...
- pl/sql programming 06 异常处理
如果 PLSQL发生了错误, 无论是系统错误还是应用错误, 都会抛出一个异常, 当前 PL/SQL 块中执行单元会暂停处理, 如果当前块有一个异常处理单元的话, 控制会转移到当前块的异常处理单元来处理 ...
- PL/SQL 训练13--plsql 优化
--数据缓存技术 --PGA和SGA---SGA:系统全局区域--PGA:Process Global Area是为每个连接到Oracle的用户进程保留的内存. ---PLSQL从PGA获取信息的速度 ...
- PL/SQL 训练08--触发器
--什么是触发器呢?--一触即发,某个事件发生时,执行的程序块?--数据库触发器是一个当数据库发生某种事件时作为对这个事件的响应而执行的一个被命名的程序单元 --适合场景--对表的修改做验证--数据库 ...
- PL/SQL 训练05--游标
--隐式游标--通过一个简单的SELECT ...INTO 语句提取一行数据,并放在一个局部变量中,最简单获取数据的途径 --显示游标--可以在声明单元明确的声明一个查询,这样可以在一个或多个程序中打 ...
- PL/SQL 训练04--事务
--pl/sql通过SQL和ORACLE数据库紧密的整合在一起--在pl/sql中可以执行任何操作语句(DML语句),包括INSERT,UPDATE,DELETE,MERGE,也包括查询语句--可否执 ...
随机推荐
- 关于EventBus3.0使用,你看这篇就够了
作为一枚Android开发者,关于EventBus相信应该都听说过.要是用过就请忽略本文,本文讲得比较基础. 要是没用过,建议你花两分钟看看. 目前EventBus最新版本是3.0,本demo基于3. ...
- 报错org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [bean.xml]
报这种错的原因基本上是applicationContext.xml文件中bean配置错误,错误如下: org.springframework.beans.factory.BeanCreationExc ...
- css3 放大缩小代码
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 【爬虫】beautiful soup笔记(待填坑)
Beautiful Soup是一个第三方的网页解析的模块.其遵循的接口为Document Tree,将网页解析成为一个树形结构. 其使用步骤如下: 1.创建对象:根据网页的文档字符串 2.搜索节点:名 ...
- 转一篇pgpool配置
转一篇pgpool配置 http://dz.sdut.edu.cn/blog/subaochen/2013/08/postgresql-9-1的failover配置及其管理/ 环境介绍 在两台虚拟机上 ...
- jQuery对象[0]倒底是什么?
s[0]倒底是什么?(s为jQuery对象)代码:var s=$("div"); alert(s.length);alert(s[0]); jQuery对象默认都有个0索引,s为j ...
- Java学习笔记——基础篇
Tips1:eclipse中会经常用到System.out.println方法,可以先输入syso,然后eclipse就会自动联想出这个语句了!! 学习笔记: *包.权限控制 1.包(package) ...
- oracle如何去除字段的回车换行符
oracle如何去除字段的回车换行符? 可以用trim也可以用replace.区别在于,trim处理字符串两端,而replace中间也可以处理. trim select '全世界无产者 ' || '联 ...
- SVN 用户名切换
方法1:主要针对Window下安装了客户端设置 右键桌面-->settings-->Saved Data -->Authentication data -->clear 方法2 ...
- 在C++中指针和引用传值区别
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...