Delphi Can

Orjinalini görmek için tıklayınız: Önermiyorum - 4
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
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
(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
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.
Biz kim veritabanı eksiklerini yamamak kim üstad. Kendi söküğümüzü yamayabilir isek ne âla.
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
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
(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.
(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
(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.
(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.