数据库

oracle存储过程procedure业务流程框架

2019-12-23  本文已影响0人  W_Dyuan

基本语法

1.过程和业务变量

CREAT OR REPLACE PROCEDURE procedure_name(I_param in CHAR,
                                          O_param out VARCHAR2,
                                          O_param0  out VARCHAR2) IS 

-------------------------------调试变量------------------------------
v_msg varchar2(200); --返回信息
v_error integer;
v_object varchar2(50) default 'procedure_name'; --标记操作对象

-------------------------------业务变量-------------------------------
--用于处理业务的临时变量
v_date char(8); --业务时间
v_name1 number(19,4); --业务变量1
v_name2 varchar(20) ; --业务变量2

2.业务处理

BEGIN
--------------------------------业务处理-------------------------------

-----------变量赋值--
O_param0 := 0
O_param := '开始执行'; --  :=用于赋值,=用于判断
v_date:=I_param; --in类型的变量

-----------创建临时表(有时会用到)--
execute immediate 'truncate table table_name';

-----------可能用到的结构--
for idx in (select t.* from table1 t) loop
  v_name1 := idx.name1;
  v_name2 := idx.name2;
  if to_date(v_date,'yyyymmdd')+1>=num then
    v_date := to_char(to_date(v_date,'yyyymmdd')+5,'yyyymmdd');
  end if;
  insert into table_name(var1,var2)
    select var1,var2 from t1
    where not exists(select * from table_name d
                     where d.var1=v_date); --exists用于挑选table_name中的数据
  commit; --注意要commit,否则数据库中不会变
end loop;

-----------主表table_mian--
insert into table_mian
  (var1,
  case
    when t.var like '%-12-01%' then -- %通配符
      '2019-12-3'
    else
      coalesce(t.var,'2019-11-01') -- coalesce按顺序选择非null值
    end var2,-- end后面还可以继续case
    '@'
select t.* from table_name t
  left join table1 a
  where t.id=a.id;
commit;

3.错误处理

-------------------------------业务结束------------------------------
O_param0 := 0 -- 即正常运行为0
O_param :='执行成功'
EXCEPTION
  when OTHERS then
    O_param0 := SQLCODE; -- 错误码
    O_param := O_param || SQLERRM; --SQLERRM错误代码错误信息
    ROLLBACK; --回调,回调没有commit或者commit出错的部分
    v_error := O_param0;
    v_msg := O_param;
    -- 一般还会将错误信息写入log
END;
oracle视图,主要用于表的查询,可结合存储过程使用
--------------------------------基本语法-----------------------------
create or replace view view_name as 
select t.var1,
       t.var2
from t_name t
left join t1_name a
  where t.id=a.id;
上一篇下一篇

猜你喜欢

热点阅读