一.在plsql中创建一个存储过程
本文转自?https://blog.csdn.net/zezezuiaiya/article/details/79557621
打开plsql,右键procedures,新建。
如果新建毫无反应 直接文件-新建-程序窗口-空白,新建一个程序窗口:?
?
存储过程创建语法:
-
?
create [or replace] procedure 存储过程名(param1 in type,param2 out type)
-
?
as
-
?
变量
1 类型(值范围);
-
?
变量2 类型(值范围);
-
?
Begin
-
?
Select 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(‘打印信息’);
-
?
Else
-
?
Raise 异常名(NO_DATA_FOUND);
-
?
End if;
-
?
?
-
?
Exception
-
?
When others then
-
?
Rollback;
-
?
End;
二:实例:写存储过程(例子)
?
-
?
--创建一个名为p_contract_purchase_import的存储过程
-
?
create or replace procedure p_contract_purchase_import(
-
?
--以下写存储过程的外部参数(传入的参数)
-
?
--格式为:参数名 in 参数类型
-
?
--注意,这里的varchar不标注大小
-
?
V_IN_SUBCOMPANYID
in VARCHAR2,--专业分公司
-
?
V_IN_PURCONTRACTMONEY
in NUMBER,--采购合同金额
-
?
V_IN_PARTYBNAME
in VARCHAR2,--供应商名称
-
?
--设置一个返回值
-
?
v_o_ret
out number --返回结果0:成功;1:失败; 4:查不到供应商; 5:添加关联失败;6:新增采购合同失败
-
?
?
-
?
)
-
?
?
-
?
--以下写内部参数
-
?
--格式为:参数名称 参数类型
-
?
--注意,这里的varchar需要标注大小
-
?
as
-
?
V_SUPPLIERID
INTEGER; --供应商编号
-
?
V_PARTYBACCOUNT VARCHAR2(100);
--收款账号
-
?
V_SQLERRM VARCHAR2(4000);
--错误详情
-
?
?
-
?
--存储过程开始
-
?
begin
-
?
--为某些变量赋初值
-
?
--格式为 变量名 := 值
-
?
v_o_ret :=
1;
-
?
V_SUPPLIERID := ‘‘;
-
?
V_PARTYBACCOUNT := ‘‘;
-
?
?
-
?
--写具体的操作语句(sql)
-
?
--if语句
-
?
if(V_IN_PARTYBNAME is not null) then
-
?
begin
-
?
select t.SUPPLIERID,t.PARTYBACCOUNT,t.PARTYBBANK,t.PARTYBNAME
-
?
into V_SUPPLIERID,V_PARTYBACCOUNT,V_PARTYBBANK,V_PARTYBNAME
-
?
from T_SUPPLIER t where t.PARTYBNAME=trim(V_IN_PARTYBNAME) and t.SUBCOMPANYID=trim(V_IN_SUBCOMPANYID);
-
?
--抛异常
-
?
exception
-
?
when others then
-
?
v_o_ret := 4 ;
--找不到该供应商
-
?
V_PARTYBNAME := V_IN_PARTYBNAME;
-
?
?
-
?
-- 将异常原因写入存储过程日志表
-
?
V_SQLERRM := SQLERRM;
-
?
INSERT INTO T_LOG_DBERR
-
?
(ERRTIME,ERRMODEL,ERRDESC)
-
?
VALUES
-
?
(SYSDATE,
-
?
‘PROCEDURES‘,
-
?
‘p_contract_purchase_import:ret=‘ || v_o_ret ||‘,‘||
-
?
V_SQLERRM);
-
?
COMMIT;
-
?
end ;
-
?
end if;
-
?
?
-
?
······
-
?
?
-
?
end ;
-
?
commit;
-
?
v_o_ret :=0 ;
-
?
?
-
?
?
-
?
return;
-
?
?
-
?
EXCEPTION
-
?
WHEN OTHERS THEN
-
?
ROLLBACK;
-
?
-- 插入异常原因
-
?
V_SQLERRM := SQLERRM;
-
?
INSERT INTO T_LOG_DBERR
-
?
(ERRTIME,‘||
-
?
V_SQLERRM);
-
?
COMMIT;
-
?
?
-
?
--存储过程结束
-
?
end p_contract_purchase_import;
1.注意begin 和 end成对?
2.务必将错误内容打印出来。否则,有的时候,就算调试看出来时哪一个语句的错误,也闹不明白错在哪里
三.存储过程调试
(编辑:ASP站长网)
|