uzun zamandır aklıma takılan fakat ertelediğim bir soruyu sormak istiyorum.
bir depo ve müşteri takip çalışması yapıyorum. depo takipte
depo
depo giriş
depo çıkış
depo stok
tablolarım var. stok tabloma sp işlemlerimde insert olayında iki alana birden giriş yaptırıyorum giriş miktarı ve giriş tpl fiyat olarak.
çıkışta da aynı yolla çıkış miktarı ve çıkış tpl fiyat arttırıyorum. bunların birde delete sp leri var yanlış girileni sildiği zaman işlemi geri almak için.
sorunum burada başlıyor. tablolarıma tek ürün girişi yaptığımda giriş ve çıkış olarak stoktaki tüm verileri siliyor. şöyle açıklayayım tablo boş ve ilk giriş ve çıkış kayıtları yapılıyor bunları stok tablosuna yazdığını görüyorum. deneme amaçlı olarak girşi tablosundan veya çıkış tablosundan kaydı sildiğimde sadece ilgili stoku sileceğine girişleri ve çıkışları olmak üzere tümünü siliyor. ama kayıt sayısı tablolarda birden fazla olduğunda böyle bir sorun yok ilgili kaydı silerek azaltma veya çoğaltma işlemini yapıyor. sizlere kodlarımı vermek istiyorum. acaba yanlışlık bendemi yoksa ilk etapta tek kayıt olduğu için bu iş normal mi?
Kod: Tümünü seç
sp lerim şöyle..........................................
CREATE PROCEDURE SPI_DEPO_GIRIS1 (
KAYIT_NO VARCHAR(128),
GIRIS_MIKTARI INTEGER,
GIRIS_TPL_FIYATI FLOAT)
AS
DECLARE VARIABLE DLR_KAYIT_SAYISI INTEGER;
begin
select count(*)
from DEPO_STOK where KAYIT_NO = :KAYIT_NO
INTO DLR_KAYIT_SAYISI;
if (DLR_KAYIT_SAYISI=0) then
insert into DEPO_STOK(KAYIT_NO,GIRIS) values(:KAYIT_NO,0);
update DEPO_STOK set
GIRIS = GIRIS+:GIRIS_MIKTARI where
KAYIT_NO = :KAYIT_NO;
select count(*)
from DEPO_STOK where KAYIT_NO = :KAYIT_NO
INTO DLR_KAYIT_SAYISI;
if (DLR_KAYIT_SAYISI=0) then
insert into DEPO_STOK(KAYIT_NO,GIRIS_FIYAT) values(:KAYIT_NO,0);
update DEPO_STOK set
GIRIS_FIYAT = GIRIS_FIYAT+:GIRIS_TPL_FIYATI where
KAYIT_NO = :KAYIT_NO;
End
CREATE PROCEDURE SPI_DEPO_CIKIS1 (
KAYIT_NO VARCHAR(128),
CIKIS_MIKTARI INTEGER,
CIKIS_TPL_FIYATI FLOAT)
AS
DECLARE VARIABLE DLR_KAYIT_SAYISI INTEGER;
begin
select count(*)
from DEPO_STOK where KAYIT_NO = :KAYIT_NO
INTO DLR_KAYIT_SAYISI;
if (DLR_KAYIT_SAYISI=0) then
insert into DEPO_STOK(KAYIT_NO,CIKIS) values(:KAYIT_NO,0);
update DEPO_STOK set
CIKIS = CIKIS+:CIKIS_MIKTARI where
KAYIT_NO = :KAYIT_NO;
select count(*)
from DEPO_STOK where KAYIT_NO = :KAYIT_NO
INTO DLR_KAYIT_SAYISI;
if (DLR_KAYIT_SAYISI=0) then
insert into DEPO_STOK(KAYIT_NO,CIKIS_FIYAT) values(:KAYIT_NO,0);
update DEPO_STOK set
CIKIS_FIYAT = CIKIS_FIYAT+:CIKIS_TPL_FIYATI where
KAYIT_NO = :KAYIT_NO;
End
triger lerim şöyle.....................................
CREATE TRIGGER TI_DEPO_CIKIS1 FOR DEPO_CIKIS1
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE numrows INTEGER;
BEGIN
select count(*)
from DEPO
where NEW.KAYIT_NO = DEPO.KAYIT_NO into numrows;
IF ( numrows = 0 ) THEN
BEGIN
EXCEPTION ERWIN_CHILD_INSERT_RESTRICT;
END
execute procedure SPI_DEPO_CIKIS1 NEW.KAYIT_NO, NEW.CIKIS_MIKTARI, NEW.CIKIS_TPL_FIYATI;
END
CREATE TRIGGER TI_DEPO_GIRIS1 FOR DEPO_GIRIS1
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE numrows INTEGER;
BEGIN
select count(*)
from DEPO
where NEW.KAYIT_NO = DEPO.KAYIT_NO into numrows;
IF ( numrows = 0 ) THEN
BEGIN
EXCEPTION ERWIN_CHILD_INSERT_RESTRICT;
END
execute procedure SPI_DEPO_GIRIS1 NEW.KAYIT_NO, NEW.GIRIS_MIKTARI, NEW.GIRIS_TPL_FIYATI;
END