Как проверить, что несколько параметров в процедуре работают правильно?

#sql #oracle #procedure

#sql #Oracle #процедура

Вопрос:

Я создал процедуру, которая принимает несколько параметров. Он хорошо работает для его создания, но когда я использую его, выдает следующую ошибку:

 ORA-01400: cannot insert NULL into   ("SQL_LPMTLWJHENVGDRAKNUHFFMJYJ"."KONTO"."KNR") ORA-06512: at "SQL_LPMTLWJHENVGDRAKNUHFFMJYJ.AIFER_INSÄTTNING", line 4
ORA-06512: at "SQL_LPMTLWJHENVGDRAKNUHFFMJYJ.DO_INSÄTTNING", line 7
ORA-06512: at line 2
ORA-06512: at "SYS.DBMS_SQL", line 1721
  

мой код:

  create or replace procedure do_insättning(
 p_pnr in insättning.pnr%type,
 p_knr in insättning.knr%type,
 p_belopp in insättning.belopp%type)
 is
 begin
 insert into insättning(radnr, pnr, knr, belopp, datum)
 values (radnr_seq.nextval, p_pnr, p_knr, p_belopp, sysdate);
 commit;
 dbms_output.put_line('Belopp på konto är '||get_saldo(p_knr));
 end;
  

и проверить:

 BEGIN
do_insättning('540126-1111', 123, 1000);
do_insättning('691124-4478', 124, 2000);
COMMIT;
END;
/
  

структура таблицы:

  create table insättning (
 radnr number(9) not null,
 pnr varchar2(11) not null,
 knr number(8) not null,
 belopp number(10,2),
 datum date not null);
  

мой триггер:

 create or replace trigger aifer_insättning
after insert 
on insättning
for each row
when (new.belopp is not null)
begin
update konto set saldo = saldo   :new.belopp;
end;
/
  

Обновил мой триггер, но теперь это еще одна ошибка:

 ORA-02291: integrity constraint (SQL_BEFWFOGHQKTQKJYDJZCSUDFOO.KNRINSÄTTNING_FK) violated - parent key not found ORA-06512: at "SQL_BEFWFOGHQKTQKJYDJZCSUDFOO.DO_INSÄTTNING", line 7
ORA-06512: at line 3
ORA-06512: at "SYS.DBMS_SQL", line 1721
  

Комментарии:

1. Похоже, что ошибка исходит от AIFER_INSÄTTNING , которая, по-видимому, является триггером, поэтому вам нужно посмотреть на это, чтобы увидеть, что он делает. Если вы все еще не можете понять, почему это ошибка, добавьте его определение в вопрос.

2. Эта вставка в konto предоставляет только одно значение столбца, и ошибка, которую вы получаете, говорит о том, что у нее есть ненулевой knr столбец, который не предоставляет вставка вашего триггера. Однако saldo указанное вами значение также равно null. Этот триггер необходимо переработать, но не очевидно, что ему нужно делать или какие значения ему нужно предоставить в konto таблицу…

3. хорошо, спасибо, я постараюсь исправить триггер

4. Похоже, вам не хватает указания значения для ненулевого столбца konto.

5. Судя по именам, я предполагаю, что вы хотите, чтобы триггер обновлял (не вставлял) существующий баланс счета, корректируя его на вновь введенную сумму депозита. Итак, ваш триггер будет работать с :new.knr and :new.belopp . Подробнее . (Триггер может быть не лучшим механизмом для этого, но я полагаю, что это курсовая работа …)