Shell执行Oracle存储过程,获得存储过程返回值(二)

2014-11-24 18:14:28 · 作者: · 浏览: 1

-- ??????
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)
);