我的代码有此错误:
插入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;
答案 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;
好运。