oracle存储过程

创建有输入参数无输出存储过程  

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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值