ORA-01422: - ORA-06512: - PullRequest
       2

ORA-01422: - ORA-06512:

0 голосов
/ 03 июля 2018

У меня есть эта ошибка для моего кода:

вставить в Giocatore (ID_giocatore, имя пользователя) Значения ('4', 'pluto')
Сообщить об ошибке -
ORA-01422: точная выборка возвращает больше запрошенного числа строк
ORA-06512: в "MONOPOLY3.INSERISCI_LOG", строка 6
ORA-06512: на "MONOPOLY3.T2", линия 2
ORA-04088: ошибка во время выполнения триггера 'MONOPOLY3.T2'

мы хотим сохранить значение, вставленное на вкладке Giocatore (ID_giocatore) в переменная "a", чтобы увидеть это значение на вкладке log_giocatore в столбце id_giocatore log_giocatore. Это процедура:

create or replace PROCEDURE  inserisci_log
AS
a integer ;
BEGIN
SELECT ID_giocatore 
INTO a
FROM (select ID_giocatore from Giocatore order by ID_GIOCATORE desc)
where rownum <2;
INSERT INTO Log_giocatore ( ID_mossa , ID_partita , ID_giocatore , ID_patrimonio ,ID_proprietà , ID_turno)
VALUES ('1' , '1' , a , '1' ,'1','1');
END inserisci_log;

И это триггер, который вызывает процедуру:

create or replace TRIGGER  t2
AFTER INSERT OR UPDATE ON Giocatore
begin
inserisci_log;
end;

1 Ответ

0 голосов
/ 03 июля 2018

Я полагаю, что вы, возможно, захотите переписать свою процедуру, чтобы принять значение ID_GIOCATORE в качестве параметра, например:

create or replace PROCEDURE inserisci_log(pin_ID_GIOCATORE IN INTEGER)
  AS
  BEGIN
    INSERT INTO Log_giocatore
      ( ID_mossa , ID_partita , ID_giocatore , ID_patrimonio ,ID_proprietà , ID_turno)
    VALUES
      ('1' , '1' , pin_ID_GIOCATORE , '1' ,'1','1');
  END inserisci_log;

Затем вы можете изменить свой триггер для передачи значения ID_GIOCATORE из новой строки:

create or replace TRIGGER  t2
  AFTER INSERT OR UPDATE ON Giocatore
  FOR EACH ROW
begin
  inserisci_log(:NEW.ID_GIOCATORE);
end t2;

Удачи.

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