SP içinde GOTO ile yönlendirme nasıl yapılır ?

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
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

SP içinde GOTO ile yönlendirme nasıl yapılır ?

Mesaj gönderen freeman35 »

FB 1.5 SP içinde GOTO ile yönlendirme yapmam gerekiyor bulabildiğim konular whenever ve goto label ama bunun ötesinde hiç bir şey bulamadım bilen varmı ?

kolay gele
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 !!!
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Nasıl yani? Biraz açar mısın?

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

baktıgım kadarıyla abi goto hata yakalamada yonlendirme yapıyor.
yani soyle bir hata,uyarı vs. (parametrik bildiriliyor) olunca sp icinde goto ile belirtilen labele atlama yapılıyor.

klasik programlamadaki (ama programcılar tarafından kullanılmayan) goto yu kullanmak istiyorsan bunun yerine while-do cozum uretebilir.
ÜŞENME,ERTELEME,VAZGEÇME
onaydin

Mesaj gönderen onaydin »

Kod: Tümünü seç

BEGIN
 INSERT INTO ADDRESS (...);
 WHEN SQLCODE -803 DO
  EXCEPTION addr_already_exists;
 END
END
goto diye bir kullanım bilmiyorum ve esasen nerde kullanılıyor merakta ettim ama hatayla ilgili ise üstteki veya hata log u tutmak için

Kod: Tümünü seç

BEGIN
 ...
WHEN ANY DO 
BEGIN INSERT INTO EXC
  (E_GDSCODE, E_SQLCODE)  VALUES   (GDSCODE, SQLCODE)
END
END
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Tam olarak istediğim bir sürü kod var, bu kodlar 4 koşula göre düzenli bu koşullarda SP ye parametre olarak giriyor. SP nin sonucu birden fazla row dönebiliyor yani SP içinde for var. Buraya kadar her şey normal ve problem yok düzgün problemsiz çalışıyor,
ama, eğer hiç bir row dönmez ise, Aynı kodu kopyalamak yerine, Sadece Parametrenin birini değiştirip başa göndermem yeticek, bunuda aklıma ilk gelen yöntem GOTO idi, Manual lara bakıncada
Argument
Description

NOT FOUND
Traps SQLCODE = 100, no qualifying rows found for the executed statement

SQLERROR
Traps SQLCODE < 0, failed statement

SQLWARNING
Traps SQLCODE > 0 AND < 100, system warning or informational message

GOTO label
Jumps to program location specified by label when a warning or error occurs

CONTINUE
Ignores the warning or error and attempts to continue processing
şimdi bu lafı görüncede "GOTO label" doğal olarak label vermem yeticek sanıyordum ama maaselef olmadı öyle değilmiş. Yukarıdaki alıntıdanda başka tek kelime bir şey bulamadım internette.

Ben algoritmamı değiştirdim istediğim sonucu elde ettim ama hala kafamda kaldı :P

yazarken aklıma geldi while ... do içine sokarsam ve koşuluda kendim verirsem istediğim yönlendirme sağlanmış olucak, ama bi çuval iş yap sen kalk LABEL koyama çok ayıp walla :P:P

Kolay gele
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 !!!
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Baba sen de GOTO'suz yapıp Recursive olarak yeni parametrelerde SP'yi yeniden çağır gitsin :)

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Baba sen de GOTO'suz yapıp Recursive olarak yeni parametrelerde SP'yi yeniden çağır gitsin
Recursive ne olaki ??? Delphi içinde callback gibi bişimi yoksa ?

Kolay gele
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 !!!
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

:)

Yani kendi kendini çağırma yöntemleri için kullanılır.

Mesela bir labirent çözdüren rutin yazdın yada directory çözümlerken kullanılan procedure'lere veya functionlara recursive (yani kendi kendini çağıran) yöntemler denir.

Kolay gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
showtime
Üye
Mesajlar: 29
Kayıt: 28 Şub 2004 04:26
Konum: Konya

Mesaj gönderen showtime »

freeman ustam görmüşsünüzdür büyük ihtimalle ama şu linke bir baksanız:
http://www.ibexpert.info/documentation/ ... /1070.html
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Bu linktekide benim bulduklarımdan farklı değil. Birisi bi tarihte yazmış bu sayfayı(hangi versiyon ve SQL belli değil) kelimelerin yerlerini değiştirip değiştirip yazıyorlar.
Ben FireBird 1.5 kullanıyorum, gerçi deiğerlerindede farklı olduğunu sanmıyorum
EXEC SQL
WHENEVER SQLERROR GO TO Error; /* Trap all errors. */

EXEC SQL
WHENEVER NOT FOUND GO TO AllDone; /* Trap SQLCODE = 100 */

EXEC SQL
WHENEVER SQLWARNING CONTINUE; /* Ignore all warnings. */
1 GO TO bitişik yazılmalı
2 not found diye komut seti yok vs vs
Error, AllDone delphi deki gibi label yani o satıra yönlendirilmesi gerekir zaten budaki açıklamalarda hep aynı yönde
Use GOTO label to jump to an error-handling routine in an application.
ama FB bunu okumamış anlaşılan :P
o label kullanılıyorsa nasıl ? yani label nasıl tanımlanacak? göndermesi tamamda "AHABURA:" bigi birşey yazıpda kodu buraya yönlendiremiyorsun. :)

Son çare olarak eğer yönlendirme yapılmak gerekiyorsa While ... do kullanılmalı. Tamaracka.com dan arattıığımda biriside aynısını yazmıştı.
Ben algoritmayı değiştirdim, tabi 1 güne patladı :)

Kolay gele
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