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,也包括查询语句--可否执 ...
随机推荐
- activity启动模式之singleTask
activity启动模式之singleTask 一.简介 如果另外一个应用调用了C2,C2在栈底,如果这个程序里面再嗲用C1,C3,C2,那么这个C2就是调用onNewIntant的,C1和C3都被销 ...
- Android TextView 设置滚动条(纯xml)
<ScrollView android:id="@+is/scrollView_id" android:layout_width="fill_parent" ...
- uva11827gcd
gcd裸题,不过输入要注意gets会tle,要用快速读入 #include<map> #include<set> #include<cmath> #include& ...
- JSP静态包含和动态包含的区别和联系
JSP页面的静态包含和动态包含 JSP中有两种包含:静态包含:<%@include file="被包含页面"%>和动态包含: <jsp:include page= ...
- KMP算法--C#版
static void BuildTable(string subString, ref int[] next) { if (string.IsNullOrWhiteSpace(subString)) ...
- 利用pycharm远程调试openstack代码
1.安装pycharm专业版 本文安装pycharm 2016.2.3专业版.网上教程较多,这里不做详细介绍,只要到pycharm官网上下载应用程序进行安装即可. 2.pycharm配置 (1)首先按 ...
- poj1274
题解: 二分图匹配 裸题匈牙利匹配 代码: #include<cstdio> #include<cstring> #include<cmath> #include& ...
- 谈一下思考,关于mybatis中<foreach collection="list">中list得来的原因 没看到官方说明
<foreach> 是在sql语句中进行多个id查询 时用到的,因为mybatis代替jdbc和hibernate, 使用 在xml文件中编写sql语句,这是一个标签文件.然后在 dao层 ...
- mac和linux下使用Docker,部署SpringBoot项目到docker
主要是看一下如何在linux及mac上安装docker,创建docker镜像,部署SpringBoot项目到docker,并借助于DaoCloud进行docker镜像下载加速等. 我用的电脑是mac, ...
- 说说geotools中坐标转换那点事
概述: 本文说说geotools中坐标转换的那点事情,以WGS84和web墨卡托相互转换为例. 效果: 转换前 转换后 单个Geometry转换 实现代码: package com.lzugis.ge ...