Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
mysql trigger subquery returns more than 1 row hatası
#1
Merhaba arkadaşlar, veritabanında bir tabloya kayıt eklediğim zaman aşağıdaki triger ile personel tablosundaki ilgili alanlarda güncelleme yapmak istiyorum fakat insert işleminden sonra
"mysql trigger subquery returns more than 1 row" hatasını alıyorum. sorun neden kaynaklanıyor
BEGIN
if (select GELIRISTISNA from personel where TC=new.TC)>new.GVISTISNA THEN
update personel set GELIRISTISNA=GELIRISTISNA-new.GVISTISNA where TC=new.TC ;
else
update personel set GELIRISTISNA=0 where TC=new.TC;
END if;
if (select DAMGAISTISNA from personel where TC=new.TC)>new.DVISTISNA THEN
update personel set DAMGAISTISNA=DAMGAISTISNA-new.DVISTISNA where TC=new.TC ;
ELSE
update personel set DAMGAISTISNA=0 where TC=new.TC ;
end if;
UPDATE personel set MATRAH=MATRAH+new.BRUT where TC=new.TC;

END
Cevapla
#2
(25-08-2022, Saat: 12:23)cvheneburi Adlı Kullanıcıdan Alıntı: Merhaba arkadaşlar, veritabanında bir tabloya kayıt eklediğim zaman aşağıdaki triger ile personel tablosundaki ilgili alanlarda güncelleme yapmak istiyorum fakat insert işleminden sonra
"mysql trigger subquery returns more than 1 row" hatasını alıyorum. sorun neden kaynaklanıyor
BEGIN

if (select GELIRISTISNA from personel where TC=new.TC)>new.GVISTISNA THEN
update personel set GELIRISTISNA=GELIRISTISNA-new.GVISTISNA where TC=new.TC ;
else
update personel set GELIRISTISNA=0 where TC=new.TC;
END if;

if (select DAMGAISTISNA from personel where TC=new.TC)>new.DVISTISNA THEN
update personel set DAMGAISTISNA=DAMGAISTISNA-new.DVISTISNA where TC=new.TC ;
ELSE
update personel set DAMGAISTISNA=0 where TC=new.TC ;
end if;

UPDATE personel set MATRAH=MATRAH+new.BRUT where TC=new.TC;

END

Merhabalar,

Bir SELECT sorgunuz da bir den fazla kayıt döndüğünü belirtiyor.

GELIRISTISNA tablosund SELECT sorgunuz da bir den fazla aynı TC'ye sahip kayıt geliyor.
Yine aynı şekilde DAMGAISTISNA tablosunda da.


declare GELIRISTISNA double default 0;
declare DAMGAISTISNA double default 0;

select p.GELIRISTISNA, p.DAMGAISTISNA into @GELIRISTISNA, @DAMGAISTISNA  from personel p
where p.TC=new.TC;

if @GELIRISTISNA>new.GVISTISNA THEN
update personel set GELIRISTISNA=GELIRISTISNA-@GELIRISTISNA where TC=new.TC ;
else
update personel set GELIRISTISNA=0 where TC=new.TC;
END if;

if @DAMGAISTISNA>new.DVISTISNA THEN
update personel set DAMGAISTISNA=DAMGAISTISNA-@DAMGAISTISNA where TC=new.TC ;
ELSE
update personel set DAMGAISTISNA=0 where TC=new.TC ;
end if;

UPDATE personel set MATRAH=MATRAH+new.BRUT where TC=new.TC;

gibi örnekler çoğaltılabilir.

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#3
(25-08-2022, Saat: 12:35)hi_selamlar Adlı Kullanıcıdan Alıntı:
(25-08-2022, Saat: 12:23)cvheneburi Adlı Kullanıcıdan Alıntı: Merhaba arkadaşlar, veritabanında bir tabloya kayıt eklediğim zaman aşağıdaki triger ile personel tablosundaki ilgili alanlarda güncelleme yapmak istiyorum fakat insert işleminden sonra
"mysql trigger subquery returns more than 1 row" hatasını alıyorum. sorun neden kaynaklanıyor
BEGIN

if (select GELIRISTISNA from personel where TC=new.TC)>new.GVISTISNA THEN
update personel set GELIRISTISNA=GELIRISTISNA-new.GVISTISNA where TC=new.TC ;
else
update personel set GELIRISTISNA=0 where TC=new.TC;
END if;

if (select DAMGAISTISNA from personel where TC=new.TC)>new.DVISTISNA THEN
update personel set DAMGAISTISNA=DAMGAISTISNA-new.DVISTISNA where TC=new.TC ;
ELSE
update personel set DAMGAISTISNA=0 where TC=new.TC ;
end if;

UPDATE personel set MATRAH=MATRAH+new.BRUT where TC=new.TC;

END

Merhabalar,

Bir SELECT sorgunuz da bir den fazla kayıt döndüğünü belirtiyor.

GELIRISTISNA tablosund SELECT sorgunuz da bir den fazla aynı TC'ye sahip kayıt geliyor.
Yine aynı şekilde DAMGAISTISNA tablosunda da.


declare GELIRISTISNA double default 0;
declare DAMGAISTISNA double default 0;

select p.GELIRISTISNA, p.DAMGAISTISNA into @GELIRISTISNA, @DAMGAISTISNA  from personel p
where p.TC=new.TC;

if @GELIRISTISNA>new.GVISTISNA THEN
update personel set GELIRISTISNA=GELIRISTISNA-@GELIRISTISNA where TC=new.TC ;
else
update personel set GELIRISTISNA=0 where TC=new.TC;
END if;

if @DAMGAISTISNA>new.DVISTISNA THEN
update personel set DAMGAISTISNA=DAMGAISTISNA-@DAMGAISTISNA where TC=new.TC ;
ELSE
update personel set DAMGAISTISNA=0 where TC=new.TC ;
end if;

UPDATE personel set MATRAH=MATRAH+new.BRUT where TC=new.TC;

gibi örnekler çoğaltılabilir.

Kolay gelsin.

Cevabınız için teşekkür ederim verdiğiniz şekilde derlediğim zaman triger a bu sefer de
unknown column 'GVISTISNA' in field list  hatasını veriyor 
tabloda GVISTISNA diye alanım var
Cevapla
#4
(26-08-2022, Saat: 21:22)cvheneburi Adlı Kullanıcıdan Alıntı:
(25-08-2022, Saat: 12:35)hi_selamlar Adlı Kullanıcıdan Alıntı: Merhabalar,

Bir SELECT sorgunuz da bir den fazla kayıt döndüğünü belirtiyor.

GELIRISTISNA tablosund SELECT sorgunuz da bir den fazla aynı TC'ye sahip kayıt geliyor.
Yine aynı şekilde DAMGAISTISNA tablosunda da.


declare GELIRISTISNA double default 0;
declare DAMGAISTISNA double default 0;

select p.GELIRISTISNA, p.DAMGAISTISNA into @GELIRISTISNA, @DAMGAISTISNA  from personel p
where p.TC=new.TC;

if @GELIRISTISNA>new.GVISTISNA THEN
update personel set GELIRISTISNA=GELIRISTISNA-@GELIRISTISNA where TC=new.TC ;
else
update personel set GELIRISTISNA=0 where TC=new.TC;
END if;

if @DAMGAISTISNA>new.DVISTISNA THEN
update personel set DAMGAISTISNA=DAMGAISTISNA-@DAMGAISTISNA where TC=new.TC ;
ELSE
update personel set DAMGAISTISNA=0 where TC=new.TC ;
end if;

UPDATE personel set MATRAH=MATRAH+new.BRUT where TC=new.TC;

gibi örnekler çoğaltılabilir.

Kolay gelsin.

Cevabınız için teşekkür ederim verdiğiniz şekilde derlediğim zaman triger a bu sefer de
unknown column 'GVISTISNA' in field list  hatasını veriyor 
tabloda GVISTISNA diye alanım var

Merhabalar,

Başına tablo ismi yazarak deneyiniz.

tabloAdi.GVISTISTISNA

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#5
(27-08-2022, Saat: 18:51)hi_selamlar Adlı Kullanıcıdan Alıntı:
(26-08-2022, Saat: 21:22)cvheneburi Adlı Kullanıcıdan Alıntı: Cevabınız için teşekkür ederim verdiğiniz şekilde derlediğim zaman triger a bu sefer de
unknown column 'GVISTISNA' in field list  hatasını veriyor 
tabloda GVISTISNA diye alanım var

Merhabalar,

Başına tablo ismi yazarak deneyiniz.

tabloAdi.GVISTISTISNA

Kolay gelsin.

malesef düzelmedi. ben kaydı triger ile değil de uygulamadan normal kod ile yapmaya çalıştığım zaman da aynı hatayı alıyorum.
Cevapla
#6
(27-08-2022, Saat: 23:41)cvheneburi Adlı Kullanıcıdan Alıntı:
(27-08-2022, Saat: 18:51)hi_selamlar Adlı Kullanıcıdan Alıntı: Merhabalar,

Başına tablo ismi yazarak deneyiniz.

tabloAdi.GVISTISTISNA

Kolay gelsin.

malesef düzelmedi. ben kaydı triger ile değil de uygulamadan normal kod ile yapmaya çalıştığım zaman da aynı hatayı alıyorum.

SORUNUN NEDEN KAYNAKLANDIĞINI BULDUM. PERSONEL TABLOSUNDA YAZILI TRİGER DA YANALIŞ ALAN ADI KULLANMAMDAN KAYNAKLANIYORMUŞ 
İLGİNİZE TEŞEKKÜR EDERİM
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  MySQL Bağlantı Sorunu - MEB akıllı tahta Frrst 6 242 10-11-2022, Saat: 23:16
Son Yorum: mcuyan
  Mysql Farklı bir autoinc mcuyan 11 442 09-11-2022, Saat: 23:05
Son Yorum: mcuyan
  Delphi 7 MySql DAC Nasıl Kurulur mahone 1 165 08-10-2022, Saat: 22:09
Son Yorum: mcuyan
  MySql ip bağlantısı akuyumcu63 5 435 10-08-2022, Saat: 16:36
Son Yorum: akuyumcu63
  Pratik MySQL Kullanım Örnekleri vkamadan 12 13.156 02-08-2022, Saat: 08:43
Son Yorum: vkamadan



Konuyu Okuyanlar: 1 Ziyaretçi