/*过程的命名,一般是目标表名前加p_,比如目标表是table_01,则过程名字是p_table_01。一个过程可以有若干个插入语句,插入语句之后,不要忘记commit.我们只拿一个的举例子。
过程中用到的表都是提前建好的。一般不在过程中建表。表名也可以。
作为输入参数,如果表名作为输入参数,则对该表的操作,需要使用动态sql。在命名过程前确保没有重名的过程,否则会。
因为使用 replace prcedure 覆盖以前的过程*/
create or replace procedure "p_table_01"(v_acct in varchar2,v_retcode out varchar2,v_retinfo out varchar2) is
过程名 :p_table_01
生成时间 :
编写人 :chz
生成周期 :月。
数据** :table_02--一般是一张表,或者几张表,通过连接(内、外连接),或者集合操作(并,差等),用来生成table_01的数据。
目标表 :table_01
过程说明 :预流失用户清单表。
修改记录 :
v_count number; -用来日志判断的。
v_pkg varchar2(40);
v_procname varchar2(40);
v_rowline number :=0;
v_tab_name varchar2(50);
v_svcid varchar2(100);
beginv_pkgp_table_01'; 包名。
v_procname :=p_table_01'; 过程名称。
v_tab_name :=table_01'; 表名。
/*日志部分,调用一个过程,记录你对表的操作情况,这个过程 p_insert_log,是对日志表insert_log进行操作的过程,一般记录相关操作信息,是开始信息,最后还一个更新过程,标记操作是否成功的。*/
v_svcid :=统计用户基本信息';
p_insert_log(v_acct,v_pkg, -包名。
v_procname, -过程名。
v_svcid, -过程的描述。
sysdate, -操作时间,这里直接取系统时间。
v_tab_name); 目标表名。
-- 前置条件判断, 接口层根据入库日志判断,其余根据过程执行日志判断。
-- 过程执行日志判断。
select count(1)
into v_count
from insert_log
where = success'
and = p_table_02';
---因为table_01的数据**与table_02,所以首先确保对table插入数据的过程,已成功完成,--否则不执行对talbe_01的插入。
if v_count >=1 then
execute immediate 'alter table table_01 truncate partition ' p' |
v_acct;
/*为了防止数据重复,删除要插入月份的数据。(前提是表是按月份分区的,若不是分区表,用delete删除)。ddl在存储过程中需要借助,动态语句来实现*/
commit;
insert into table_01
select v_acct,v_01,v_02,case
when v_03 >=0 and v_03 <=3 then
when v_03 > 3 and v_03 <=6 then
when v_03 > 6 and v_03 <=12 then
when v_03 > 12 and v_03 <=24 then
when v_03 > 24 then
else
end v_03,to_char(v_04, 'yyyymm') v_04 是日期型,转换字符型,也就是在select语句中可以使用函数操作。
from table_02 a
where = v_acct --v_acct,为输入参数,做一些条件筛选(或者也可以是几张表,做关联);
commit;
v_retcode :=success'; 表示数据插入成功,作为过程的输出字段。
v_retinfo :=结束'; 表示数据插入成功,作为过程的输出字段。
elsev_retcode :=wait'; 前置条件不满足,标识为等待,工作流调度用。
v_retinfo :=等待';
end if;
-- 更新执行结果,更新insert_log表,记录该过程是否成功,操作时间等。
p_update_log(v_acct,v_pkg,v_procname,v_svcid,v_retinfo,v_retcode,sysdate,v_rowline);
exception
---例外情况,比如前面语句有错误等。
when others then
v_retcode :=fail'; 过程输出失败。
v_retinfo :=sqlerrm; -过程输出失败原因。
p_update_log(v_acct, -同样更新日志,这是查看错误原因。
v_pkg,v_procname,v_svcid,v_retinfo,v_retcode,sysdate,v_rowline);
end;
存储过程学习总结
存储过程。一 概述。存储过程 stored procedure 应用在大型数据库系统中,是sql语句和流程控制语句的集合,经编译后存储在数据库系统中,用户通过指定存储过程的名字并给出参数 如果带有参数的话 来执行,类似高级语言中的函数。在创建时编译一次,以后执行时运行很快。存储过程的种类 1系统存储...
Oracle高级编程 存储过程
存储过程 pl sql提供了三种判断语句。1 if then 2 if then else 3 if then else if else 编写一个存储过程输入员工号,如果该员工初始的工资小于1200,则给其增加10 j a程序调用procedure 循环语句 1 loop是pl sql中最简单的循环...
存储过程语法集锦 经典
1 create or replace procedure 存储过程名。2 is3 begin 4 null 5 end 行1 create or replace procedure 是一个sql语句通知oracle数据库去创建一个叫做skeleton存储过程,如果存在就覆盖它 行2 is关键词表明...