KULLANICI ID NUMARASINA GÖRE PROCEDURE ÇALIŞTIRMA

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
MugenPower
Üye
Mesajlar: 2
Kayıt: 04 May 2022 09:23

KULLANICI ID NUMARASINA GÖRE PROCEDURE ÇALIŞTIRMA

Mesaj gönderen MugenPower »

Merhaba,

Bir Stored Procedure Yazdım. Görevi : Her elemanın sattığı markaya göre eleman ve marka bazlı id üretmek. Bunun için o kişi ve o markaya ait genrator tetiklenecek.
Örneğin :
Ahmet-Honda-001
Mehmet-Audi-001
Hüseyin-Fiat-004
gibi.
Değişken kriteri olarak eleman id ve marka id leri alıyor.
Procedure tamamen hazır , sadece generator ismini procedure içinde okutmam lazım. Bunun syntax i nasıldır bilen var mı?

create procedure SP_ELEMAN_ID_GENERATOR (
ELEMAN_ID integer,
MARKA_ID integer)

returns (
ID integer,
GEN_NAME varchar(30))
as
declare variable ELEMAN_ADI varchar(30);
declare variable MARKA_ADI varchar(30);
declare variable RAPORNO varchar(30);
declare variable SENE integer;
declare variable GEN_AD varchar(30);

begin
ELEMAN_ADI='';
MARKA_ADI='';
RAPORNO='';
SENE=(EXTRACT (YEAR FROM CURRENT_DATE));

if(ELEMAN_ID is null or ELEMAN_ID < 1 ) then
exit;

select ******************************************=:ELEMAN_ID into :ELEMAN_ADI;
select ******************************************=:MARKA_ID into :MARKA_ADI;

GEN_AD = 'ELEMAN'||:ELEMAN_ID||'_GEN_MARKA'||:MARKA_ID;

/*ÖRNEK : AHMET1_GEN_HONDA1*/

GEN_NAME = :GEN_AD;

ID = GEN_ID(GEN_NAME, 1); BU SATIRDA HATA VERİYOR GEN_NAME TANIMSIZ DİYE

RAPORNO = :ELEMAN_ADI||SENE||:MARKA_ADI;

SUSPEND;

end
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: KULLANICI ID NUMARASINA GÖRE PROCEDURE ÇALIŞTIRMA

Mesaj gönderen freeman35 »

Merhaba,
Forum kurallarını oku. Başlık ve/veya mesaj içeriğinde gereksiz büyük harf kullanma. mesaj içerisinde tag ları kullanırsan <code> gibi mesajın daha anlaşılır olur.
Sen generator ı neden kullanmak istiyorsun? "AHMET1_GEN_HONDA1" bu son derece mantıksız bir yol.

Kod: Tümünü seç

CREATE SEQUENCE AHMET1_GEN_HONDA1 START WITH 1 INCREMENT BY 1;
ALTER SEQUENCE AHMET1_GEN_HONDA1 RESTART WITH 2;-- Kaçtan başlamasını istiyorsan

/* Eski sistemde:
CREATE GENERATOR AHMET1_GEN_HONDA1;
SET GENERATOR AHMET1_GEN_HONDA1 TO 2;-- Kaçtan başlamasını istiyorsan
*/
Aldığın hata o isimde generator olmamasından kaynaklı. sende yazmışsın zaten.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
MugenPower
Üye
Mesajlar: 2
Kayıt: 04 May 2022 09:23

Re: KULLANICI ID NUMARASINA GÖRE PROCEDURE ÇALIŞTIRMA

Mesaj gönderen MugenPower »

Büyük küçük harf gibi gereksiz bir yere odaklanıp asıl soruyu göz<den kaçırmayınız.

Generator adını procedure ile tespit etmeye çalışıyorum.
Ahmet için 20 ayrı generator var diyelim.
Mehmet için de aynı şekilde.
Ahmetin her generator ü bir markaya id üretiyor.
Ahmet-Honda-128
Ahmet Renault-74
Mehmet-Honda-62

Gibi id leri üreteceğim. Procedure hangi generator ü çalıştıracağını buluyor (GEN_NAME elde ettiği isim bu), ama o ismi procedure' e okutmam için doğru syntax ı bulamadım. Bu hata veren satırı kaldırdığımda GEN_NAME değişkeninin içeriği Ahmet_Gen_1 gibi bir değer getiriyor procedure çalışırken. Bu değere karşılık gelen generator de var . Git çalıştır onu demeye çalışıyorum
ID = GEN_ID(GEN_NAME, 1);
GEN_NAME yazılışı ya da buraya aktarılması nasıl olmalı ?
ID = GEN_ID(:GEN_NAME, 1); bu olmadı. Başka bir metod ya da yazım şekli ?
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: KULLANICI ID NUMARASINA GÖRE PROCEDURE ÇALIŞTIRMA

Mesaj gönderen freeman35 »

MugenPower yazdı: 05 May 2022 03:14 Büyük küçük harf gibi gereksiz bir yere odaklanıp asıl soruyu göz<den kaçırmayınız.
Manasız boş bir cümle olmuş. Kurallarımıza uyulmak zorunda.

Kod: Tümünü seç

EXECUTE BLOCK
returns(ID int)
AS
BEGIN
   ID = NEXT VALUE FOR GEN_xxx_ID;
  SUSPEND;
END
String oluşturup execute statement kullanabilirsin.
https://www.firebirdsql.org/pdfmanual/h ... yntax.html
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Cevapla