CREATE OR REPLACE PROCEDURE ADD_OFERTA(valorO IN NUMBER, ali IN VARCHAR,subast IN NUMBER) AS
fech DATE;
cedCompr INTEGER;
reqpor INTEGER;
reqmin INTEGER;
inicial NUMBER;
mejor NUMBER;
tmp INTEGER;
prueba NUMBER;
BEGIN
fech := SYSDATE;
select porcentaje into reqpor from requisito;
select incremento into reqmin from requisito;
select precioInicial INTO inicial FROM subasta Where fk_idofertaganadora is null and PK_idSubasta=subast;
EXCEPTION
WHEN NO_DATA_FOUND then
INICIAL:=0;
SELECT pk_idParticipante into cedCompr from PARTICIPANTE p where p.FK_ALIASUSUARIO = ali;
select o.valorOferta into mejor from subasta s inner join oferta o on(s.fk_idofertaganadora=o.pk_idoferta) where s.pk_idsubasta=subast;
EXCEPTION
WHEN NO_DATA_FOUND THEN-- ERROR here
INICIAL:=0;
select greatest((inicial),(mejor+reqmin),(mejor*(reqpor/100 + 1))) into prueba from dual;
IF (valorO>=prueba) THEN
INSERT INTO OFERTA(PK_idOferta,fecha,valoroferta,fk_idcomprador,fk_idsubasta) VALUES(ID_OFERTA.NEXTVAL,fech,valorO,cedCompr,subast);
update subasta set FK_idofertaganadora=ID_OFERTA.CURRVAL where pk_idsubasta=subast;
END IF;
END ADD_OFERTA;
我的问题是在第二个Exeption Oracle中显示:
错误(19,5):PLS-00103:当遇到以下情况之一时遇到符号“EXCEPTION”:(如果使用<&lt,则在开始情况下声明结束退出goto if loop mod null pragma raise return select update ;继续关闭当前删除获取锁定插入打开回滚保存点设置sql执行提交forall合并管道清除
错误(28,15):PLS-00103:遇到以下其中一项时遇到符号“end-of-file”:end not pragma final instantiable order overriding static member constructor map
答案 0 :(得分:1)
您不能在同一个块中多次使用相同的异常。 AFAIK,EXCEPTION语句就像整个块的Error-Catcher一样,所以你想把你的proc分成两个不同的块,就像这样(我想,我自己从来没有这样做过):
CREATE OR REPLACE PROCEDURE ADD_OFERTA(valorO IN NUMBER, ali IN VARCHAR,subast IN NUMBER) AS
fech DATE;
cedCompr INTEGER;
reqpor INTEGER;
reqmin INTEGER;
inicial NUMBER;
mejor NUMBER;
tmp INTEGER;
prueba NUMBER;
BEGIN
fech := SYSDATE;
BEGIN
select porcentaje into reqpor from requisito;
select incremento into reqmin from requisito;
select precioInicial INTO inicial FROM subasta Where fk_idofertaganadora is null and PK_idSubasta=subast;
EXCEPTION
WHEN NO_DATA_FOUND then
INICIAL:=0;
END
BEGIN
SELECT pk_idParticipante into cedCompr from PARTICIPANTE p where p.FK_ALIASUSUARIO = ali;
select o.valorOferta into mejor from subasta s inner join oferta o on(s.fk_idofertaganadora=o.pk_idoferta) where s.pk_idsubasta=subast;
EXCEPTION
WHEN NO_DATA_FOUND THEN-- ERROR here
INICIAL:=0;
END
select greatest((inicial),(mejor+reqmin),(mejor*(reqpor/100 + 1))) into prueba from dual;
IF (valorO>=prueba) THEN
INSERT INTO OFERTA(PK_idOferta,fecha,valoroferta,fk_idcomprador,fk_idsubasta) VALUES(ID_OFERTA.NEXTVAL,fech,valorO,cedCompr,subast);
update subasta set FK_idofertaganadora=ID_OFERTA.CURRVAL where pk_idsubasta=subast;
END IF;
END ADD_OFERTA;
答案 1 :(得分:0)
CREATE OR REPLACE PROCEDURE ADD_OFERTA(valorO IN NUMBER, ali IN VARCHAR,subast IN NUMBER) AS
fech DATE;
cedCompr INTEGER;
reqpor INTEGER;
reqmin INTEGER;
inicial NUMBER;
mejor NUMBER;
tmp INTEGER;
prueba NUMBER;
BEGIN
fech := SYSDATE;
select porcentaje into reqpor from requisito;
select incremento into reqmin from requisito;
select precioInicial INTO inicial FROM subasta Where fk_idofertaganadora is null and PK_idSubasta=subast;
EXCEPTION
WHEN NO_DATA_FOUND then
BEGIN
INICIAL:=0;
SELECT pk_idParticipante into cedCompr from PARTICIPANTE p where p.FK_ALIASUSUARIO = ali;
select o.valorOferta into mejor from subasta s inner join oferta o on(s.fk_idofertaganadora=o.pk_idoferta) where s.pk_idsubasta=subast;
EXCEPTION
WHEN NO_DATA_FOUND THEN-- ERROR here
INICIAL:=0;
select greatest((inicial),(mejor+reqmin),(mejor*(reqpor/100 + 1))) into prueba from dual;
IF (valorO>=prueba) THEN
INSERT INTO OFERTA(PK_idOferta,fecha,valoroferta,fk_idcomprador,fk_idsubasta) VALUES(ID_OFERTA.NEXTVAL,fech,valorO,cedCompr,subast);
update subasta set FK_idofertaganadora=ID_OFERTA.CURRVAL where pk_idsubasta=subast;
END IF;
END;
END ADD_OFERTA;