ORA-01422:- ORA-06512:
Posted
技术标签:
【中文标题】ORA-01422:- ORA-06512:【英文标题】:ORA-01422: - ORA-06512: 【发布时间】:2018-07-03 13:09:53 【问题描述】:我的代码有这个错误:
插入 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;
【问题讨论】:
请从相关标签中删除sql server,因为您似乎在oracle中 ORA-01422: select ID_giocatore from Giocatore order by ID_GIOCATORE desc 返回多于一行 我知道但我无法解决它你能帮我吗?在 giocatore 选项卡中,我们有这些列(ID_giocatore,用户名),它们有更多实例。用户名是表 utente(用户名,密码)的外键。 @Indrakumara 与 where rownum 【参考方案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;
祝你好运。
【讨论】:
以上是关于ORA-01422:- ORA-06512:的主要内容,如果未能解决你的问题,请参考以下文章
返回多于 1 行的 SELECT INTO - ORA-01422