创建有输入参数无输出存储过程
CREATE OR REPLACE Procedure ODS_IDCINFO.Ps_Etl_Logs
-- 外部输入参数
(
v_Begin_Time In Date,
v_Run_Status In Number,
v_schemaname In varchar,
v_tablename In varchar
) As
-- 内部自定义参数
v_End_Time Date;
v_cnt number(10);
selectCountStr varchar2(4000);
Begin
-- 直接赋值
v_End_Time := Systimestamp;
--v_End_Time := 1;
-- 输入变量直接使用
Insert Into ods_idcinfo.Etl_Logs
(Begin_Date, End_Date, Run_Times, Run_Status)
Select v_Begin_Time,
v_End_Time,
'RUNNINGTIME:' || Round((v_End_Time - v_Begin_Time) * 24 * 3600, 2) || 'S',
v_Run_Status
From Dual;
-- select赋值
select count(*) into v_cnt from ods.t1;
-- if语句
if v_cnt>0 then
comm_data.up_update_data_complete('1');
-- 内部执行存储过程也要提交
commit;
end if;
--拼接并执行动态语句
selectCountStr:='Insert Into ehr.countresult(schemaname,tablename,cnt,dt)Select '''||v_schemaname||''','''||v_tablename||''',count(1),sysdate From '||v_schemaname||'.'||v_tablename;
Dbms_Output.Put_Line(selectCountStr);
EXECUTE IMMEDIATE selectCountStr ;
commit;
-- 一定要记得提交
Commit;
Exception
When Others Then
Dbms_Output.Put_Line('记录日志出错!');
End;
执行存储过程
-- 在PL/SQL developer中或者存储过程中执行存储过程-------------------------
begin
update_salgrade2(0);
end;
-- 在外部执行存储过程---------------------------------------
call update_salgrade2(0);
返回游标的存储过程
CREATE OR REPLACE Procedure dw_all.test_procedure
-- 外部输入参数
(
v_name In varchar,
r_result out sys_refcursor
) As
v_sql varchar2(1000);
Begin
-- 存储过程中两个单引号转义为一个单引号,见下面的where条件
v_sql := 'select a,b from dw_all.test where a='''||v_name||'''';
-- 使用open将结果存入游标返回出去
OPEN r_result FOR v_sql;
Exception
When Others Then
Dbms_Output.Put_Line('出错!');
End;