存储过程是一个命名程序块,包括过程的名称,过程使用的参数以及过程执行的操作。
经常需要用到的一些操作封装后提出来,存在数据库中,那么下次/以后就可以直接去调用这个存储过程就可以得到我们想要的结果。
是用日志来追溯问题的,记录整个程序的运行情况,知道哪个环节报错了,记录每一步花了多少时间,判断哪一步性能不好,从而多程序进行修改和优化。
语法格式:
CREATE [OR REPLACE] PROCEDURE sp_过程名
IS/AS
PL/SQL过程体;
提示:这里是存储过程说明
begin ......end;
1、用匿名块调用
DECLARE ---当我们不需要声明的时候,默认把DECLARE给省略了
BEGIN
存储过程名;
--[另一个存储过程名;]
END;
2、用call调用存储过程,适用于不带输出参数(out)的存储过程
call 存储过程名();
create or replace procedure sp_cf99
is
begin
for i in 1..9 loop
for j in 1..i loop
dbms_output.put(i||'*'||j||'='||i*j||' ');
end loop;
dbms_output.put_line('');
end loop;
end;
---1.匿名调用
begin
sp_cf99;
end;
---2.用call 调用 注:存储过程名后面的括号()不能省。
call sp_cf99();
语法格式:
CREATE OR REPLACE PROCEDURE 存储过程名(参数1 [IN/OUT/IN OUT] 数据类型,参数2 [IN/OUT/IN OUT] 数据类型...) --- 参数的数据类型也是不能带长度
IS/* / AS*/ --声明
BEGIN
--执行体/逻辑体
END;
提示:这里是存储过程说明
OR REPLACE
:表示如果存储过程已经存在,则替换已有的存储过程。IN
表示传入参数,不可以被赋值;OUT
表示传出参数,可以被赋值;IN OUT
表示传入传出参数,可以传入值,可以被赋值,可以返回值。如果这部分省略,默认表示传入参数,创建存储过程可以带参也可以不带参。IS/AS
:在IS/AS后声明变量不要加DECLARE语句。命名规范:
SP_目标表名
P_参数名(P_START_DATE)
V_变量名(V_END_DATE)
1、用匿名块调用
DECLARE ---当我们不需要声明的时候,默认把DECLARE给省略了
BEGIN
存储过程名(参数1,参数2...);
--[另一个存储过程名;]
END;
2、用call调用存储过程,适用于不带输出参数(out)的存储过程
call 存储过程名(参数1,参数2...);
create or replace procedure sp_jiafa(p_m in number,p_n in number,p out number)
is
begin
p:=p_m+p_n; --对输出参数p进行赋值,输入参数在代码块中不能
dbms_output.put_line(p_m||'加上'||p_n||'的值是:'||p);
end;
---1.匿名调用
declare
a number; --声明一个变量
begin
sp_jiafa(34,56,a);
sp_jiafa(p_m=>78,p_n=>12,a); -- => 为赋值符号
sp_jiafa(p_m=>&参数1,p_n=>&参数2,a); -- &参数 用于弹窗输入参数值
end;
存储过程输出结果:
注意:带参的存储过程
不能使用call
进行调用。会报错
call sp_jiafa(10,20,p); ---不能用call