1 create or replace procedure 存储过程名。
2 is3 begin
4 null;
5 end;
行1:create or replace procedure 是一个sql语句通知oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它;
行2:is关键词表明后面将跟随一个pl/sql体。
行3:begin关键词表明pl/sql体的开始。
行4:null pl/sql语句表明什么事都不做,这句不能删去,因为pl/sql体中至少需要有一句;
行5:end关键词表明pl/sql体的结束。
create or replace procedure 存储过程名(param1 in type,param2 out type)
as 变量1 类型(值范围); vs_ms**archar2(4000);
变量2 类型(值范围);
beginselect count(*)into 变量1 from 表a where列名=param1;
if (判断条件) then
select 列名 into 变量2 from 表a where列名=param1;
dbms_output。put_line(‘打印信息’);
elsif (判断条件) then
dbms_output。put_line(‘打印信息’);
elseraise 异常名(no_data_found);
end if;
exception
when others then
rollback;
end;注意事项:
1, 存储过程参数不带取值范围,in表示传入,out表示输出。
类型可以使用任意oracle中的合法类型。
2, 变量带取值范围,后面接分号。
3, 在判断语句前最好先用count(*)函数判断是否存在该条操作记录。
4, 用select 。。into。。。给变量赋值。
5, 在**中抛异常用 raise+异常名。
create or replace procedure存储过程名。
-定义参数。
is_ym in char(6) ,the_count out number,
as -定义变量
vs_ms**archar2(4000);-错误信息变量。
vs_ym_begchar(6);-起始月份。
vs_ym_endchar(6);-终止月份。
vs_ym_sn_begchar(6);-同期起始月份。
vs_ym_sn_endchar(6);-同期终止月份。
-定义游标(简单的说就是一个可以遍历的结果集)
cursor cur_1 is
select 。。
from 。。
where 。。
group by 。。
begin
-用输入参数给变量赋初值,用到了oralce的substr to_char add_months
to_date 等很常用的函数。
vs_ym_beg :=substr(is_ym,1,6);
vs_ym_end :=substr(is_ym,7,6);
vs_ym_sn_beg :=to_char(add_months(to_date(vs_ym_beg,'yyyymm'),12),'yyyymm');
vs_ym_sn_end :=to_char(add_months(to_date(vs_ym_end,'yyyymm'),12),'yyyymm');
-先删除表中特定条件的数据。
delete from 表名 where ym = is_ym;
--然后用内置的dbms_output对象的put_line方法打印出影响的记录行数,其中用到一个系统变量sql%rowcount
dbms_'del上月记录='|sql%rowcount||'条');
insert into表名(area_code,ym,cmcode,rmb_amt,usd_amt)
select area_code,is_ym,cmcode,sum(rmb_amt)/10000,sum(usd_amt)/10000
from bgd_area_cm_m_base_t
where ym >=vs_ym_beg
and ym <=vs_ym_end
group by area_code,cmcode;
dbms_'ins当月记录='|sql%rowcount||'条');
-遍历游标处理后更新到表。遍历游标有几种方法,用for语句是其中比较直观的一种。
for rec in cur_1 loop
update 表名。
set rmb_amt_sn =
where area_code =
and cmcode =
and ym = is_ym;
end loop;
commit;
-错误处理部分。others表示除了声明外的任意错误。sqlerrm是系统内置变量保存了当前错误的详细信息。
exception
when others then
vs_msg :=error in xxxxxxxxxxx_p('|is_ym||'substr(sqlerrm,1,500);
rollback;
--把当前错误记录进日志表。
insert into log_info(proc_name,error_info,op_date)
values('xxxxxxxxxxx_p',vs_msg,sysdate);
commit;
return;
end;oracle存储过程语法。
1 、判断语句:
if 比较式 then begin end; end if;
create or replace procedure test(x in number) is
begin
if x >0 then
begin
x :=0 - x;
end; end if;
if x = 0 then
begin
x: =1;
end; end if;
end test;
2 、for 循环
for ..in ..loop
- 执行语句
end loop;
1) 循环遍历游标
create or replace procedure test() as
cursor cursor is select name from student; name varchar(20);
begin
for name in cursor loop
begin
dbms_
end; end loop;
end test;
2) 循环遍历数组
create or replace procedure test(vararray in as
-( 输入参数vararray 是自定义的数组类型,定义方式见标题6)
i number;
begin
i :=1; -存储过程数组是起始位置是从1 开始的,与j**a 、c 、c++ 等语言不同。因为在oracle 中本是没有数组的概念的,数组其实就是一张
- 表(table), 每个数组元素就是表中的一个记录,所以遍历数组时就相当于从表中的第一条记录开始遍历
for i in 1.. loop
dbms_ no.'|i ||record in vararray is:'|vararray(i));
end loop;
end test;
3 、while 循环
while 条件语句 loop
begin
end; end loop;
create or replace procedure test(i in number) as
begin
while i < 10 loop
begin
i:= i + 1;
end; end loop;
end test;
4 、数组
首先明确一个概念:oracle 中本是没有数组的概念的,数组其实就是一张表(table), 每个数组元素就是表中的一个记录。
使用数组时,用户可以使用oracle 已经定义好的数组类型,或可根据自己的需要定义数组类型。
1) 使用oracle 自带的数组类型
x array; -使用时需要需要进行初始化
create or replace procedure test(y out array) is
x array;
begin
x :=new array();
y :=x;
end test;
2) 自定义的数组类型 ( 自定义数据类型时,建议通过创建package 的方式实现,以便于管理)
create or replace package mypackage is
public type declarations type info is record( name varchar(20), y number);
SQL存储过程高级基础语法
sql存储过程基本语法 一。注释。单行注释,从这到本行结束为注释sql 语法,类似c c 中 多行注释,类似c c 中 二。变量 int,smallint,tinyint,decimal,float,real,money smallmoneysql 语法,text image,char,varcha...
存储过程格式
过程的命名,一般是目标表名前加p 比如目标表是table 01,则过程名字是p table 01。一个过程可以有若干个插入语句,插入语句之后,不要忘记commit.我们只拿一个的举例子。过程中用到的表都是提前建好的。一般不在过程中建表。表名也可以。作为输入参数,如果表名作为输入参数,则对该表的操作,...
存储过程学习总结
存储过程。一 概述。存储过程 stored procedure 应用在大型数据库系统中,是sql语句和流程控制语句的集合,经编译后存储在数据库系统中,用户通过指定存储过程的名字并给出参数 如果带有参数的话 来执行,类似高级语言中的函数。在创建时编译一次,以后执行时运行很快。存储过程的种类 1系统存储...