Veri bütünlüğünde riski göze almayıp olabildiğince tüm işleri veritabanı kısmında procedure ler ile yapmaya çalışıyorum ancak bir konuda takıldım kısaca yapmak istediğimi özetliyeyim. Master-Detail ilişkisi olan Sipariş ve Sipariş detayları tablolarım var. Yazmak istediğim ama yazamadığım SP de Sipariş tablosundaki teslim tarihi girilip kayıt edildiğinde o siparişe ait olan tüm sipariş detaylarının bulunup burdaki ürün id lerine göre hareket kayıtları oluşturmak istiyorum.
Aşağıda ki procedure çalışıyor ama kod içinde de belirttiğim yerde göreceksiniz sipariş id ye bağlı olan detayları bulup kaç tane kayıt varsa o kadar insert yapmak istiyorum.
Kod: Tümünü seç
CREATE PROCEDURE SP_SIPARIS_INS(
TARIH DATE,
REF_TABLO VARCHAR(30) CHARACTER SET WIN1254,
REF_ID INTEGER,
CARI_ID INTEGER,
FIYAT NUMERIC(18, 2),
SIPARIS_ID INTEGER,
TUR SMALLINT)
AS
DECLARE VARIABLE URUN_ADI VARCHAR(50) CHARACTER SET WIN1254;
DECLARE VARIABLE SIPARIS_NO VARCHAR(20) CHARACTER SET WIN1254;
DECLARE VARIABLE CARI_KOD VARCHAR(20) CHARACTER SET WIN1254;
DECLARE VARIABLE ACIKLAMA VARCHAR(200) CHARACTER SET WIN1254;
BEGIN
IF (TARIH IS NULL) THEN EXIT; /*SİPARİŞ TESLİM TARİHİ BOŞ İSE İPTAL*/
IF (TUR=0) THEN URUN_ADI ='PANAROMİK ALBÜM SİPARİŞİ';
IF (TUR=1) THEN URUN_ADI ='SİPARİŞ';
SELECT SIPARIS_NO FROM SIPARISLER WHERE SIPARIS_ID = :SIPARIS_ID /*Sipariş no alınıyor*/
INTO :SIPARIS_NO;
SELECT CARI_KOD FROM CARILER WHERE CARI_ID = :CARI_ID /*Cari kod alınıyor*/
INTO :CARI_KOD;
ACIKLAMA = URUN_ADI||' '||SIPARIS_NO||'; CARİ: '||CARI_KOD;/*Açıklama oluşturuluyor*/
INSERT INTO CARI_HAREKET /*Cari Hareket kaydı giriliyor*/
(TARIH,ACIKLAMA,BORC,REF_TABLO,REF_ID,CARI_ID)
VALUES
(:TARIH,:ACIKLAMA,:FIYAT,:REF_TABLO,:REF_ID,:CARI_ID);
ACIKLAMA = 'SİPARİŞ: '||SIPARIS_NO||'; ÜRÜN: '||URUN_ADI||'; CARİ: '||CARI_KOD; /*Ürün Hareket girişi için açıklama oluşturuluyor*/
{İŞTE AŞAĞIDAKİ İNSERT OLAYININ SIPARIS_ID İLE İLİŞKİLİ OLAN SIPARIS_DETAY KAYITLARININ BULUNUP BURDAKİ ÜRÜN İD LERİNE GÖRE GERÇEKLEŞMESİNİ İSTİYORUM, YANİ KAÇ TANE SİPARİŞ DETAY ATIRI VARSA O KADAR ÜRÜN HAREKET KAYDI GİRMEM GEREKLİ}
INSERT INTO URUN_HAREKET
(URUN_ID,TARIH,HAR_TIP,ACIKLAMA,REF_TABLO,REF_ID,EVRAK_NO,MIKTAR,BFIYAT,TUTAR)
VALUES
(:URUN_ID,:TARIH,'G',:ACIKLAMA,:REF_TABLO,:REF_ID,:SIPARIS_NO,:ADET,:FIYAT,:TFIYAT);
SUSPEND;
END