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,也包括查询语句--可否执 ...
随机推荐
- Android ADT远程主机强迫关闭了一个现有的连接 Connection attempts: 1 解决方法
adb有一个限制, 也可以说是bug. 当手机上同时运行的进程数大于64时, 就会引发adb奔溃. 更深层次的原因, 就是windows API的WaitForMultipleObjects所支持的 ...
- Java基础13:反射与注解详解
Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...
- Gradle 一(Android)
参考一:Gradle 完整指南(Android) 参考二:深入理解Android(一):Gradle详解 参考三:Gradle for Android 第一篇( 从 Gradle 和 AS 开始 ) ...
- python 2 3 读写中文文件 使用codecs最方便
codecs进行文件的读取 python给我们提供了一个包codecs进行文件的读取,这个包中的open()函数可以指定编码的类型: import codecs f = codecs.open('te ...
- 获取整个页面HTML的信息以及注意事项
两种方式: 1.从每个节点获取 var a = '<!DOCTYPE html><html lang="zh-cn">'; var z = "&l ...
- SpringMVC中WebDataBinder的应用及原理
Controller方法的参数类型可以是基本类型,也可以是封装后的普通Java类型.若这个普通Java类型没有声明任何注解,则意味着它的每一个属性都需要到Request中去查找对应的请求参数.众所周 ...
- 有了Docker的程序猿们就能开启“上帝视角”?
现在,如果有程序猿说不知道Docker,这将是难以想象的. 百科是这样描述Docker的."Docker是dotCloud开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植 ...
- Android代码混淆及项目发布方法记录
Android代码混淆及项目发布步骤记录 本来整理了一份Android项目混淆与发布的文档,突然想到何不写篇博客,分享一下呢,如是便有了本文. Android代码混淆及项目发布步骤记录 一.清理 ...
- Thrift之java实例
一.java实例 1.下载与安装thrift工具 http://thrift.apache.org/download/ .服务器代码 服务Test实现类 package com.zychen.thri ...
- 打印机无法使用且无法重新安装,提示spooler service is not running
使用场景:之前安装好的打印服务今天突然无法使用,列表里面找不到打印机,于是重新安装,得到以下错误: The local print spooler service is not running. Pl ...