一个简单的Oracle的存储过程,为什么会错误,请大虾指正,谢谢
如下,我在SQLPLUS下运行的时候总是说“警告: 创建的过程带有编译错误”请问是为什么?
create table person(id number(12,0) not null primary key,name char(10) not null,sex char(2) not null);
create sequence id;
--上面的运行正确
CREATE OR REPLACE PROCEDURE addperson(name in varchar2,sex in varchar2,idReturn out number) IS
BEGIN
insert into person(id,name,sex) values(id.nextval,:name,:sex);
select id.currval into idReturn;
END addperson;
在insert的时候,后面的字符串该如果加单引号啊,还有select id.currval into idReturn会不会存在并发性的问题啊,是否需要在上面的存储过程运行的时候对sequence id进行锁定呢?如果需要锁定,怎么锁定?
问题点数:30、回复次数:2Top
1 楼KingSunSha(弱水三千)回复于 2001-10-04 13:04:14 得分 30
改正第一版(仅仅通过调试):
CREATE OR REPLACE PROCEDURE addperson(name in varchar2,sex in varchar2,idReturn out number) IS
BEGIN
insert into person(id,name,sex) values(id.nextval,name,sex);
select id.currval into idReturn from dual;
END addperson;
改正第二版(避免用NAME这样的变量, 否则容易和字段名混淆; 同时避免SEQUENCE ID在前后两次取值过程中有差异):
CREATE OR REPLACE PROCEDURE addperson
(p_name in varchar2,
p_sex in varchar2,
idReturn out number) IS
temp_id number;
BEGIN
select id.nextval
into temp_id
from dual;
insert into person (id,name,sex)
values(temp_id,p_name,p_sex);
idReturn := temp_id;
END addperson;
Top
2 楼czb(草中宝)回复于 2001-10-04 13:42:27 得分 0
谢谢KingSunSha(弱水三千)的解答,分数过几天就会送上。Top




