oracle 存储过程错误

J*mes 2009-06-22 06:42:10
谁能帮我找找这个存储过程哪里错了。我第一次写ORACLE的存储过程。。。
谢谢


PROCEDURE add_vendor(
p_VendorName IN VARCHAR2,
o_ErrorCode OUT NUMBER,
o_Message OUT VARCHAR2
) IS
v_VendorID NUMBER;

CURSOR cIsVendorExist IS SELECT 1 FROM ECT_Vendor_lookup WHERE vendor_Name = p_VendorName;
v_VendorExist NUMBER := 0;
BEGIN
o_Message := 'STARTED';
o_ErrorCode := -1;

OPEN cIsVendorExist;
FETCH cIsVendorExist INTO v_VendorExist;
CLOSE cIsVendorExist;

o_ErrorCode := -2;
IF (v_VendorExist = 1) THEN
o_ErrorCode := -3;
o_Message := 'Vendor already exists!';
ELSE
SELECT ect_global_seq.NEXTVAL INTO v_VendorID FROM dual;
o_ErrorCode := -4;
INSERT INTO ECT_vendor_lookup(vendor_id,vendor_name) values (v_VendorID,p_VendorName);
o_ErrorCode := 1;
o_Message := 'SUCCESS';
END IF;


EXCEPTION
WHEN OTHERS THEN
o_Message := 'Flag ' || o_ErrorCode || '; Message: ' || o_Message || '; SQLERRM: ' || SQLERRM;
o_ErrorCode := SQLCODE;
END;
...全文
21 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
superhsj 2009-06-23
  • 打赏
  • 举报
回复
lz把报的错误码贴出来看看
cab1225 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yhuib 的回复:]
判断表中是否存在某条记录不需要用游标,建议改成

SQL code
select count(0) into v_VendorExist
from dual
where exists (select 1
from ECT_Vendor_lookup
WHERE vendor_Name = p_VendorName
)
;



去掉定义的游标及相关部分
[/Quote]

见意不错。!!楼主,你可以试试哦!
J*mes 2009-06-23
  • 打赏
  • 举报
回复
谢谢各位的回复,我找到错误了,是我外面的参数名写错了。。。
anxing 2009-06-22
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE add_vendor(
p_VendorName IN VARCHAR2,
o_ErrorCode OUT NUMBER,
o_Message OUT VARCHAR2
) IS
v_VendorID NUMBER;

CURSOR cIsVendorExist IS SELECT 1 FROM ECT_Vendor_lookup WHERE vendor_Name = p_VendorName;
v_VendorExist NUMBER := 0;
BEGIN
o_Message := 'STARTED';
o_ErrorCode := -1;

OPEN cIsVendorExist;
FETCH cIsVendorExist INTO v_VendorExist;
CLOSE cIsVendorExist;

o_ErrorCode := -2;
IF (v_VendorExist = 1) THEN
o_ErrorCode := -3;
o_Message := 'Vendor already exists!';
ELSE
SELECT ect_global_seq.NEXTVAL INTO v_VendorID FROM dual;
o_ErrorCode := -4;
INSERT INTO ECT_vendor_lookup(vendor_id,vendor_name) values (v_VendorID,p_VendorName);
o_ErrorCode := 1;
o_Message := 'SUCCESS';
END IF;


EXCEPTION
WHEN OTHERS THEN
o_Message := 'Flag ' || o_ErrorCode || '; Message: ' || o_Message || '; SQLERRM: ' || SQLERRM;
o_ErrorCode := SQLCODE;
END;
Richard345265669 2009-06-22
  • 打赏
  • 举报
回复
引用 2 楼 duzif 的回复:
CREATE OR REPLACE PROCEDURE....

很有可能
yhuib 2009-06-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 duzif 的回复:]
CREATE OR REPLACE PROCEDURE....
[/Quote]
有可能
yhuib 2009-06-22
  • 打赏
  • 举报
回复
判断表中是否存在某条记录不需要用游标,建议改成

select count(0) into v_VendorExist
from dual
where exists (select 1
from ECT_Vendor_lookup
WHERE vendor_Name = p_VendorName
)
;

去掉定义的游标及相关部分
duzif 2009-06-22
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE....
yhuib 2009-06-22
  • 打赏
  • 举报
回复
什么错误啊?编译不通过还是结果不对?

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧