存储过程格式

发布 2022-06-28 03:04:28 阅读 5841

/*过程的命名,一般是目标表名前加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关键词表明...