Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Önermiyorum - 4
#1
Yine MySQL yine aptalca bir şey. Rastladıkça ve vaktim de elverir ise, sizlere bu aptallıkları yazmaya çalışacağım.

MySQL'de bir sorgudan dönecek olan kayıt sayısını LIMIT ile sınırlandırabiliyoruz, malumunuz olduğu üzere. Ancak LIMIT parametrik olamıyor. Yani yazdığınız bir stored procedure içindeki SELECT ifadesine dinamik olarak "şu kadar adet kayıt dönsün" işlemi yaptıramıyorsunuz.

Ayrıca, yine bu beceriksiz RDBMS reqursive trigger çağrımlarına müsaade etmiyor.

Bu nasıl bir RDBMS her geçen gün biraz daha şaşırıyorum. SqLite'ın bile Exclamation   bundan daha yetenekli olabilme ihtimali aklıma gelmiyor değil Angry
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#2
(28-12-2018, Saat: 09:28)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Yine MySQL yine aptalca bir şey. Rastladıkça ve vaktim de elverir ise, sizlere bu aptallıkları yazmaya çalışacağım.

MySQL'de bir sorgudan dönecek olan kayıt sayısını LIMIT ile sınırlandırabiliyoruz, malumunuz olduğu üzere. Ancak LIMIT parametrik olamıyor. Yani yazdığınız bir stored procedure içindeki SELECT ifadesine dinamik olarak "şu kadar adet kayıt dönsün" işlemi yaptıramıyorsunuz.

Ayrıca, yine bu beceriksiz RDBMS reqursive trigger çağrımlarına müsaade etmiyor.

Bu nasıl bir RDBMS her geçen gün biraz daha şaşırıyorum. SqLite'ın bile Exclamation   bundan daha yetenekli olabilme ihtimali aklıma gelmiyor değil Angry

Kendi kendime düzeltme.

Biraz sağ kulağımızı sol el ile tutmak gibi oldu ama, aşağıdaki şekilde bu kısıt'tan kurtulabildim:

CREATE PROCEDURE sp_ReportLog_BROWSE_Ex( $ReportID INT(11), $RecordCount INT(11))
BEGIN
 DECLARE
   InternalRecordCount INT DEFAULT 0;

 SET InternalRecordCount = IFNULL($RecordCount, (SELECT COUNT(*) FROM reportlog));

 SELECT
   R.ReportName,
   R.ReportDescription,

   RL.ID,
   RL.ReportID,
   RL.ExecutedAt,
   RL.ExecutionTimeMs,
   RL.ExecutionParameters,
   RL.IsSent,
   RL.SentDateTime,
   IFNULL(
           (
             SELECT COUNT(*)
             FROM reportlog
             WHERE
               ReportID = RL.ReportID
             GROUP BY
               ReportID
           ), 0
         ) AS NumberOfExecution,
   IFNULL(
           (
             SELECT SUM(ExecutionTimeMs)
             FROM reportlog
             WHERE
               ReportID = RL.ReportID
             GROUP BY
               ReportID
           ), 0
         ) AS SumOfExecutionTimeMs
 FROM reportlog RL
   INNER JOIN reports R ON R.ID = RL.ReportID
 WHERE
   RL.ReportID  = IFNULL($ReportID, RL.ReportID)
 ORDER BY
   RL.ExecutedAt DESC
 LIMIT InternalRecordCount;
END
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
Merhaba hocam, 
Değerli bilgiler için teşekkür ederim.
Allah sabır versin, Allah beterinden saklasın. Smile
Yavaş yavaş mySQL DDL Helper'ları (veri tabanının eksikliklerini yamama) da oluşturursunuz bu gidişle.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#4
Biz kim veritabanı eksiklerini yamamak kim üstad. Kendi söküğümüzü yamayabilir isek ne âla.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#5
Zamamında b*ktan çözümlerle yapmaya çalışmıştık olmuştu ama içime sinmemişti, bu örneği de deneyeyim.

Bu benim denediğimden çook daha mantıklı Big Grin
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla
#6
MariaDB'de böyle bir sıkıntı kalmamış;

Örnek;

CREATE PROCEDURE `sp_limit_test`( IN `aLimitci` INT )
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'Parametrik LIMIT kullanımı örneği'
BEGIN
  SELECT * FROM  INFORMATION_SCHEMA.TABLE_CONSTRAINTS LIMIT aLimitci;
END
P.Safa:Yaşlanarak değil, yaşayarak tecrübe kazanılır.Zaman insanları değil,armutları olgunlaştırır
C.Yücel:Toprak gibi olmalısın! Ezildikçe sertleşmelisin!Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı
S.Canan:Bildiğini zannettiğin an hiç bir şey öğrenemezsin
Bilgi uçar
WWW
Cevapla
#7
(02-01-2019, Saat: 13:42)uparlayan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.MariaDB'de böyle bir sıkıntı kalmamış;

Örnek;

CREATE PROCEDURE `sp_limit_test`( IN `aLimitci` INT )
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'Parametrik LIMIT kullanımı örneği'
BEGIN
  SELECT * FROM  INFORMATION_SCHEMA.TABLE_CONSTRAINTS LIMIT aLimitci;
END

Bilgilendirme için teşekkürler üstad.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#8
(28-12-2018, Saat: 11:36)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Zamamında b*ktan çözümlerle yapmaya çalışmıştık olmuştu ama içime sinmemişti, bu örneği de deneyeyim.

Bu benim denediğimden çook daha mantıklı Big Grin

MySQL 5.1 de bu şekilde de kullanılamıyor,

yani procedure içerisinde declare ettiğin değişkeni limit olarak kullanamıyorsun Smile
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla
#9
(25-01-2019, Saat: 14:28)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(28-12-2018, Saat: 11:36)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Zamamında b*ktan çözümlerle yapmaya çalışmıştık olmuştu ama içime sinmemişti, bu örneği de deneyeyim.

Bu benim denediğimden çook daha mantıklı Big Grin

MySQL 5.1 de bu şekilde de kullanılamıyor,

yani procedure içerisinde declare ettiğin değişkeni limit olarak kullanamıyorsun Smile
Yanlis cevirmediysem 5.5 ten itibaren gelmis. Eski surumlerle ilgilide bir yontem yapmislar

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#10
(25-01-2019, Saat: 14:41)klavye Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(25-01-2019, Saat: 14:28)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.MySQL 5.1 de bu şekilde de kullanılamıyor,

yani procedure içerisinde declare ettiğin değişkeni limit olarak kullanamıyorsun Smile
Yanlis cevirmediysem 5.5 ten itibaren gelmis. Eski surumlerle ilgilide bir yontem yapmislar

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

sevmediğim bir yöntem prepare edeceğime sql kodu delphi tarafına geçiririm.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Önermiyorum - 9 (MySQL'de ALTER komutunun olmaması) Tuğrul HELVACI 13 1.053 16-01-2019, Saat: 09:01
Son Yorum: Tuğrul HELVACI
  Önermiyorum - 8 Tuğrul HELVACI 3 460 12-01-2019, Saat: 07:57
Son Yorum: Bay_Y
  Önermiyorum - 7 (Update ettiğin tabloyu Where kısmında kullanamazsın) Tuğrul HELVACI 14 1.033 04-01-2019, Saat: 14:12
Son Yorum: mad85
  Önermiyorum - 6 (Check_ConstrainsYok) uparlayan 9 901 04-01-2019, Saat: 09:13
Son Yorum: csunguray
  Önermiyorum - 5 (INT > BIGINT) Tuğrul HELVACI 9 788 02-01-2019, Saat: 09:57
Son Yorum: Tuğrul HELVACI



Konuyu Okuyanlar: 1 Ziyaretçi