SQL'de değişken tanımı ve kullanımı nasıl yapılır?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
oklawa
Üye
Mesajlar: 68
Kayıt: 01 Oca 2008 02:53

SQL'de değişken tanımı ve kullanımı nasıl yapılır?

Mesaj gönderen oklawa »

Selamlar..

Kod: Tümünü seç

Procedure updatemyfield(field:string);
Function xxy(x,y:integer):extended;
begin
  result:=abs(x/y)*pi;
end;
Begin
  mytable.edit;
  mytable.fieldbyname(field).asextended := xxy(mytable.fieldbyname('xfield').asinteger, mytable.fieldbyname('yfield').asinteger);
  mytable.post;
end;
Buna benzer işlemler için için SQL dizesinde fonksiyon ve değişken tanımı yapılabilirmi?
Amacım SQL içerisindeki nümerik fonksiyonları kullanmak (abs, sqr, pwr vs.)
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: SQL'de değişken tanımı ve kullanımı nasıl yapılır?

Mesaj gönderen sabanakman »

SQL Server sorgunuz

Kod: Tümünü seç

update mytable set ALANADI=ABS(xfield/yfield) where SATIRNO=123 --???
biçiminde olabilir. Değeri değiştirilecek ilgili satırın numarasını where şartında belirmeniz gerekmektedir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
oklawa
Üye
Mesajlar: 68
Kayıt: 01 Oca 2008 02:53

Re: SQL'de değişken tanımı ve kullanımı nasıl yapılır?

Mesaj gönderen oklawa »

Cevap için teşekkürler. İhtiyacımı tam anlatamadım, bu da benim hatam..

Tablodaki tüm kayıtların (şart gözetmeksizin) tek alanına değer atamak 1 saniye civarında sürüyor.
örneğin:

Kod: Tümünü seç

update mytable set myfield=5;
Gayet hızlı.

Tabloyu baştan sona tarayıp satır satır tarayıp, bu alana 5 atamak dakikalar sürüyor.
Hızlandırmanın da bir yolunu bulamadım.
Örneğin

Kod: Tümünü seç

   while Not dm.Query.EOF do
   begin 
     Query.edit;
     Query.FieldByName('myfield').AsInteger:=5;
     Query.Post;
     Query.Next;
  end;
MyField alanına atacağım değer bir formülün sonucu

Kod: Tümünü seç

Procedure TForm1.CalculateDistances(mx,my,tx,ty:integer);
var x1,y1:integer;
    dx,dy:integer;
    m:Extended;
    cr,rc:integer;
Function haritamesafe(a,b:integer):integer;
  var d:integer;
  begin
     d:=abs(a-b);
     if d>400 then d:=abs(d-(801));
     result:=d;
  end;
  Function mesafe(x,x1,y,y1:integer):extended;
  begin
    dx := haritamesafe(x,x1);
    dy := haritamesafe(y,y1);
    Result:=sqrt(dx*dx + dy*dy);
  end;
Begin
   while Not dm.Query.EOF do
   begin 
     Query.Edit;
     Query.FieldByName('myfield').asextended:=mesafe(mx,tx,my,ty);
     Query.Post;
     Query.Next;
  end;
end;  
Yapacağım işlem tam olarak bu, 30.000 civarı kayıt için 45dk-1 saat arası aman alıyor.

Yanlış anlaşılmasın, bana kodu hazırlayıp yazarsınız diye birşey ummuyorum.
Burada karşıma çıktı, başka zamanda ihtiyacım olabilir..

Sql de bu tip bir fonksiyon/değişken grubu tanımlama gibi bir imkan var mı?
javascriptler'i html kodlarında kullanırız ya, scripti bir yerde yazarız, sayfada istediğimiz yerde çağırır kullanırız..
Benzer bir yapıyı SQL'de kurabilirmiyiz?
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: SQL'de değişken tanımı ve kullanımı nasıl yapılır?

Mesaj gönderen conari »

Stored Prosedure yazıp kullanın.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: SQL'de değişken tanımı ve kullanımı nasıl yapılır?

Mesaj gönderen sabanakman »

SQL içerisinde de fonksiyon tanımlayabilirsiniz. Örneğinizin SQL karşılığı

Kod: Tümünü seç

CREATE FUNCTION haritamesafe (@a int, @b int)  
RETURNS int  
BEGIN 
  declare @d int
  set @d=abs(isnull(@a,0)-isnull(@b,0))
  if @d>400 set @d=abs(@d-801)
  return @d
END


CREATE FUNCTION mesafe (@x int, @x1 int, @y int, @y1 int)  
RETURNS float  
BEGIN 
  declare @dx int, @dy int
  set @dx=dbo.haritamesafe(@x, @x1)
  set @dy=dbo.haritamesafe(@y, @y1)
  return SQRT(@dx*@dx+@dy*@dy)
END
şeklinde fonksiyon tanımlanabilecektir. Bunu da

Kod: Tümünü seç

Query2.SQL.Text:=Format('update mytable set myfield=dbo.mesafe(%d,%d,%d,%d)',[mx,my,tx,ty]);
Query2.ExecSQL;
şeklinde kullanabilirsiniz.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
oklawa
Üye
Mesajlar: 68
Kayıt: 01 Oca 2008 02:53

Re: SQL'de değişken tanımı ve kullanımı nasıl yapılır?

Mesaj gönderen oklawa »

Çok teşekkür ederim, çok makbule geçti..
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: SQL'de değişken tanımı ve kullanımı nasıl yapılır?

Mesaj gönderen neu84 »

sabanakman yazdı:SQL içerisinde de fonksiyon tanımlayabilirsiniz. Örneğinizin SQL karşılığı

Kod: Tümünü seç

CREATE FUNCTION haritamesafe (@a int, @b int)  
RETURNS int  
BEGIN 
  declare @d int
  set @d=abs(isnull(@a,0)-isnull(@b,0))
  if @d>400 set @d=abs(@d-801)
  return @d
END


CREATE FUNCTION mesafe (@x int, @x1 int, @y int, @y1 int)  
RETURNS float  
BEGIN 
  declare @dx int, @dy int
  set @dx=dbo.haritamesafe(@x, @x1)
  set @dy=dbo.haritamesafe(@y, @y1)
  return SQRT(@dx*@dx+@dy*@dy)
END
şeklinde fonksiyon tanımlanabilecektir. Bunu da

Kod: Tümünü seç

Query2.SQL.Text:=Format('update mytable set myfield=dbo.mesafe(%d,%d,%d,%d)',[mx,my,tx,ty]);
Query2.ExecSQL;
şeklinde kullanabilirsiniz.
S.a, SabanAkman kardeş bu kullanığınız yöntemin bi adı varmı, rica etsem bu yaptıklarınızı kısaca özetleyebilirmisiniz?.
Veritabanında ki sp lere

Kod: Tümünü seç

dbo.mesafe(%d,%d,%d,%d)
bu şekilde mi ulaşılıyor? dbo koymuşsunuz önüne, bu "mesafe" tablo olmuyor mu o zaman? Aydınlatırsanız çok sevirim.
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: SQL'de değişken tanımı ve kullanımı nasıl yapılır?

Mesaj gönderen unicorn64 »

neu84 yazdı:S.a, SabanAkman kardeş bu kullanığınız yöntemin bi adı varmı, rica etsem bu yaptıklarınızı kısaca özetleyebilirmisiniz?.
sorunuzun cevabı verilmiş aslında...
conari yazdı:Stored Prosedure yazıp kullanın.
sabanakman yazdı:

Kod: Tümünü seç

CREATE FUNCTION haritamesafe (@a int, @b int) RETURNS int  


CREATE FUNCTION mesafe (@x int, @x1 int, @y int, @y1 int) RETURNS float

"haritamesafe" ve "mesafe" sql tarafında tanımlanmış fonksiyonlar... delphide yaptığınız işi sql tarafında yapıyorlar ve delphidekine göre daha hızlı çalışırlar...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: SQL'de değişken tanımı ve kullanımı nasıl yapılır?

Mesaj gönderen neu84 »

unicorn64 yazdı:
neu84 yazdı:S.a, SabanAkman kardeş bu kullanığınız yöntemin bi adı varmı, rica etsem bu yaptıklarınızı kısaca özetleyebilirmisiniz?.
sorunuzun cevabı verilmiş aslında...
conari yazdı:Stored Prosedure yazıp kullanın.
sabanakman yazdı:

Kod: Tümünü seç

CREATE FUNCTION haritamesafe (@a int, @b int) RETURNS int  


CREATE FUNCTION mesafe (@x int, @x1 int, @y int, @y1 int) RETURNS float

"haritamesafe" ve "mesafe" sql tarafında tanımlanmış fonksiyonlar... delphide yaptığınız işi sql tarafında yapıyorlar ve delphidekine göre daha hızlı çalışırlar...

Tşk ederim. Anlamadığım nokta önüne dbo nun koyulmasıydı, sql server a girip baktım sp lerinde önüne geliyomuş o şema (şema mı kullanıcı mı hala muallaktayım) adı. Ben sadece tablolara geliyor sanıyordum. Tşk ederim cevap için...
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: SQL'de değişken tanımı ve kullanımı nasıl yapılır?

Mesaj gönderen unicorn64 »

dbo -> database owner
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: SQL'de değişken tanımı ve kullanımı nasıl yapılır?

Mesaj gönderen sabanakman »

Konu eğer SQL Server ise başlık kullanıcı olarak geçse de genel veritabanı literatürlerinde başlık şema olacaktır ve aslında yapı aynı yapının değişik isim almasından ibarettir. Bu konuya şimdilik çok takılmadan devam edebilirsiniz. Bir veri tabanındaki tüm nesneler bir şemaya aittir ve SQL Server için varsayılanı dbo'dur. SQL fonksiyonları ise şema ismi verilerek kullanabildiklerinden bu sorguda dbo şeması altında kullanılmıştır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: SQL'de değişken tanımı ve kullanımı nasıl yapılır?

Mesaj gönderen neu84 »

sabanakman yazdı:Konu eğer SQL Server ise başlık kullanıcı olarak geçse de genel veritabanı literatürlerinde başlık şema olacaktır ve aslında yapı aynı yapının değişik isim almasından ibarettir. Bu konuya şimdilik çok takılmadan devam edebilirsiniz. Bir veri tabanındaki tüm nesneler bir şemaya aittir ve SQL Server için varsayılanı dbo'dur. SQL fonksiyonları ise şema ismi verilerek kullanabildiklerinden bu sorguda dbo şeması altında kullanılmıştır.

Tşk ederim..
Cevapla