ORA-01422:-ORA-06512:

时间:2018-07-03 13:09:54

标签: sql oracle plsql

我的代码有此错误:

  

插入Giocatore(ID_giocatore,username)值('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 :(得分:1)

我建议您可能要重写过程以接受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;

好运。