同事做一个小的etl调度,需要将存储过程执行情况进行返回并控制其后续依赖是否执行,本人只是将调用执行存储过程的shell脚本中存
同事做一个小的etl调度,需要将存储过程执行情况进行返回并控制其后续依赖是否执行,本人只是将调用执行存储过程的shell脚本中存储过程输出参数返回,并没有写具体的控制程给大家,如果在这个思路上继续进行开发,那就是一个小的etl调度程序,有需要可以联系我,360263676,共同研究共同进步,哈哈
下面将各个脚本进行说明:(ex_produre.sh)
1.执行存储过程脚本
#!/bin/bash
user_name=$1
user_pass=$2
produre_name=$3
statis_sign=$4
sql_str=`
sqlplus -S $user_name/$user_pass as sysdba set linesize 800;
set long 2048576;
set serveroutput on;
var oi_return number;
call $user_name.$produre_name($statis_sign,:oi_return);
select :oi_return from dual;
exit
EOF`
echo "$sql_str"|sed -e '4,/^$/!d;/^$/d'|
while read run_return
do
echo $run_return
done
2.调执行存储过程的shell脚本(ex_proc.sh)
#!/bin/bash
sh ex_produre.sh etl jiangtao pdm_cust_act_behav_base 201003 |grep -v OI_RETURN |grep -v -| while read vi_result
do
#this date
echo $vi_result
if [ $vi_result -eq 0 ]
then
echo "this produre is normal run "
else
echo "this produre is not normal run "
fi
done
3.相关存储过程及建表脚本(这个大家可以做为模板使用,,这可是一家大公司的模版,哈哈)
a.存储过程(pdm_cust_act_behav_base )
create or replace procedure pdm_cust_act_behav_base (is_month in varchar2, oi_return out number)
/** HEAD
* @name etl.pdm_cust_act_behav_base
* @caption ??????????
* @type ???
* @parameter is_month in varchar2 ???????YYYYMM
* @parameter oi_return out number ?????????0 ???-1 ??
* @description ??????????
* @target etl#tdm_cust_act_behav_base
* @source hwmk#tmm_ci_user_basic_m
* @middle
* @version 1.0
* @author
* @create-date
* @TODO ?
* @version
* @mender
* @modify_date
* @modify_desc
* @copyright
*/
-- ********************************************************************************
-- ????: etl.pdm_cust_act_behav_base
-- ????: ??????????
-- ????: is_month - ????
-- ????: oi_return - ?????????0 ???-1 ??
-- ????: hwmk.tmm_ci_user_basic_m
-- ????: etl.tdm_cust_act_behav_base
-- ????:
-- ????:
-- ????:
-- ????: v1.0
-- ????:
-- ????:
-- ????:
-- ????:
-- ????:
-- ********************************************************************************
is
vs_task_name varchar2(30); -- ????
vs_table_name varchar2(30); -- ???
vs_message varchar2(200); -- ????
vi_task_id integer; -- ??id
vi_month integer; -- ????
begin
vs_task_name := 'pdm_cust_act_behav_base';
vs_table_name := 'tdm_cust_act_behav_base';
-- ??????
etl.ps_log(vs_task_name, vs_table_name, is_month, 1, null, vi_task_id);
-- ??: ??????????
if (is_month is null) then
vs_message := '??????????';
etl.ps_log(null, null, null, 3, vs_message, vi_task_id);
oi_return := -1;
return;
end if;
------------------------------------------------------------
-- ??????
vi_month := to_number(is_month);
------------------------------------------------------------
insert into etl.tdm_cust_act_behav_base
(
statis_month,
serv_id
)
select
vi_month,
15204669284
from dual
;
commit;
------------------------------------------------------------
-- ??????
etl.ps_log(null, null, null, 2, null, vi_task_id);
-- ????
oi_return := 0;
return;
exception
when others then
-- ??????
vs_message := substr(sqlerrm, 1, 200);
-- ????
rollback;
-- ??????
etl.ps_log(null, null, null, 3, vs_message, vi_task_id);
-- ????
oi_return := -1;
return;
end;
/
b.存储过程(ps_log)
create or replace procedure ps_log
(
is_task_name in varchar2,
is_table_name in varchar2,
is_task_sign in varchar2,
ii_task_status in integer,
is_task_log in varchar2,
oi_task_id in out integer
)
-- ********************************************************************************
-- ????: etl.ps_log
-- ????: DW????????
-- ????: is_task_name - ????
-- is_table_name - ????
-- is_task_sign - ????, ???????????
-- ii_task_status - ????, 1 ?????, 2 ??????, 3 ??????
-- is_task_log - ????, ????[?????]?[??????],
-- ????[????]
-- oi_task_id - ??ID, ???2?3??????
-- ii_rowcount - ???
-- ????: oi_task_id - ??ID, ???1??????
-- ????:
-- ????: etl.ts_log
-- ????:
-- ????: ???
-- ????: 2010-02-01
-- ????: V1.0
-- ????:
-- ????:
-- ????:
-- ????:
-- ????: ????
-- ********************************************************************************
is
vs_err_msg varchar2(255); -- ??????
begin
if ii_task_status = 1 then
-- ????????????
select etl.seq_dw_log.nextval
into oi_task_id
from dual;
insert into etl.ts_log
(
task_id, -- ??ID
task_name, -- ????
table_name, -- ????
task_sign, -- ????
start_time, -- ??????
end_time, -- ?????????????
task_status, -- ????
task_log -- ????
)
values
(
oi_task_id,
is_task_name,
is_table_name,
is_task_sign,
sysdate,
null,
'1',
'?????'
);
elsif ii_task_status = 2 then
-- ????????????ID????????
update etl.ts_log
set end_time = sysdate,
task_status = '2',
task_log = '??????'
where task_id = oi_task_id;
else
-- ??????????ID?????????????
update etl.ts_log
set end_time = sysdate,
task_status = '3',
task_log = substr(is_task_log, 1, 200)
where task_id = oi_task_id;
end if;
commit;
-- ????
return;
exception
-- ????
when others then
-- ??????
vs_err_msg := substr(sqlerrm, 1, 200);
-- ????
rollback;
-- ??????
dbms_output.put_line('etl.ps_log: ' || vs_err_msg);
-- ????
return;
end;
/
c.建表脚本:
-- Create sequence
create sequence SEQ_DW_LOG
minvalue 1
maxvalue 999999999999999999999999999
start with 2731
increment by 1
cache 20;
create table TS_LOG
(
TASK_ID INTEGER,
TASK_NAME VARCHAR2(30),
TABLE_NAME VARCHAR2(30),
TASK_SIGN VARCHAR2(20),
START_TIME DATE,
END_TIME DATE,
TASK_STATUS VARCHAR2(1),
TASK_LOG VARCHAR2(200),
ROWCOUNT NUMBER
);
-- Create table
create table TDM_CUST_ACT_BEHAV_BASE
(
STATIS_MONTH NUMBER(10),
SERV_ID NUMBER(12)
);

在数据库优化中,应根据查询需求选择索引策略:1.当查询涉及多个列且条件顺序固定时,使用复合索引;2.当查询涉及多个列但条件顺序不固定时,使用多个单列索引。复合索引适用于优化多列查询,单列索引则适合单列查询。

要优化MySQL慢查询,需使用slowquerylog和performance_schema:1.启用slowquerylog并设置阈值,记录慢查询;2.利用performance_schema分析查询执行细节,找出性能瓶颈并优化。

MySQL和SQL是开发者必备技能。1.MySQL是开源的关系型数据库管理系统,SQL是用于管理和操作数据库的标准语言。2.MySQL通过高效的数据存储和检索功能支持多种存储引擎,SQL通过简单语句完成复杂数据操作。3.使用示例包括基本查询和高级查询,如按条件过滤和排序。4.常见错误包括语法错误和性能问题,可通过检查SQL语句和使用EXPLAIN命令优化。5.性能优化技巧包括使用索引、避免全表扫描、优化JOIN操作和提升代码可读性。

MySQL异步主从复制通过binlog实现数据同步,提升读性能和高可用性。1)主服务器记录变更到binlog;2)从服务器通过I/O线程读取binlog;3)从服务器的SQL线程应用binlog同步数据。

MySQL是一个开源的关系型数据库管理系统。1)创建数据库和表:使用CREATEDATABASE和CREATETABLE命令。2)基本操作:INSERT、UPDATE、DELETE和SELECT。3)高级操作:JOIN、子查询和事务处理。4)调试技巧:检查语法、数据类型和权限。5)优化建议:使用索引、避免SELECT*和使用事务。

MySQL的安装和基本操作包括:1.下载并安装MySQL,设置根用户密码;2.使用SQL命令创建数据库和表,如CREATEDATABASE和CREATETABLE;3.执行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.创建索引和存储过程以优化性能和实现复杂逻辑。通过这些步骤,你可以从零开始构建和管理MySQL数据库。

InnoDBBufferPool通过将数据和索引页加载到内存中来提升MySQL数据库的性能。1)数据页加载到BufferPool中,减少磁盘I/O。2)脏页被标记并定期刷新到磁盘。3)LRU算法管理数据页淘汰。4)预读机制提前加载可能需要的数据页。

MySQL适合初学者使用,因为它安装简单、功能强大且易于管理数据。1.安装和配置简单,适用于多种操作系统。2.支持基本操作如创建数据库和表、插入、查询、更新和删除数据。3.提供高级功能如JOIN操作和子查询。4.可以通过索引、查询优化和分表分区来提升性能。5.支持备份、恢复和安全措施,确保数据的安全和一致性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 英文版
推荐:为Win版本,支持代码提示!