В Oracle не найдены данные - PullRequest
       1

В Oracle не найдены данные

1 голос
/ 23 января 2012

Я пытаюсь вставить данные в базу данных Oracle (версия 11g xe). Но когда я пытаюсь выполнить процедуру, используя жабу, я получаю сообщение об ошибке «ORA-01403: данные не найдены». Вот мой код

CREATE OR REPLACE PROCEDURE ACTSINFO.sp_Insert_WorkDetails 
(p_workname IN varchar ,
p_workaddress IN varchar)
IS
BEGIN   
   insert into workdetails (workname,workaddress) values (p_workname,p_workaddress);
END sp_Insert_WorkDetails;

Я попытался выполнить процедуру, используя приведенное ниже значение

EXEC sp_Insert_WorkDetails('test','test');

Также я определил триггер и последовательность для автоинкремента workdetailsid в таблице workdetails

Последовательность следующая

 ALTER SEQUENCE ACTSINFO.WORKDETAILS_WORKID_SEQ
 INCREMENT BY 1
 MINVALUE 0
 MAXVALUE 9999999999999999999999999999
 NOCACHE
 NOCYCLE
 NOORDER

Триггер выглядит следующим образом

DROP TRIGGER ACTSINFO.WORKDETAILS_INSERT;
CREATE OR REPLACE TRIGGER ACTSINFO.WORKDETAILS_INSERT
BEFORE INSERT
ON ACTSINFO.WORKDETAILS
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
  SELECT WORKDETAILS_WORKID_SEQ.NEXTVAL INTO :NEW.WORKID FROM WORKDETAILS;
END;

Я новичок в оракуле. Пожалуйста, помогите мне ...

1 Ответ

7 голосов
/ 23 января 2012

Ваш триггер - проблема:

SELECT WORKDETAILS_WORKID_SEQ.NEXTVAL INTO :NEW.WORKID FROM WORKDETAILS;

Если в рабочих подробностях нет строк, выбор не будет возвращать ничего.Хуже того, если в вашей таблице workdetails более одной строки, это также с треском провалится.

Вы действительно хотите следующее:

SELECT WORKDETAILS_WORKID_SEQ.NEXTVAL INTO :NEW.WORKID FROM dual;

или - если вы на 11g - тогда вы можетеиспользовать:

:NEW.WORKID := WORKDETAILS_WORKID_SEQ.NEXTVAL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...