Delphi Can
Önermiyorum - 4 - Baskı Önizleme

+- Delphi Can (http://www.delphican.com)
+-- Forum: Veri Tabanı (http://www.delphican.com/forumdisplay.php?fid=4)
+--- Forum: MySQL (http://www.delphican.com/forumdisplay.php?fid=14)
+--- Konu Başlığı: Önermiyorum - 4 (/showthread.php?tid=3082)



Önermiyorum - 4 - Tuğrul HELVACI - 28-12-2018

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


Cvp: Önermiyorum - 4 - Tuğrul HELVACI - 28-12-2018

(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



Cvp: Önermiyorum - 4 - Fesih ARSLAN - 28-12-2018

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.


Önermiyorum - 4 - Tuğrul HELVACI - 28-12-2018

Biz kim veritabanı eksiklerini yamamak kim üstad. Kendi söküğümüzü yamayabilir isek ne âla.


Önermiyorum - 4 - yhackup - 28-12-2018

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


Önermiyorum - 4 - uparlayan - 02-01-2019

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



Cvp: Önermiyorum - 4 - Tuğrul HELVACI - 02-01-2019

(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.


Önermiyorum - 4 - yhackup - 25-01-2019

(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


Cvp: Önermiyorum - 4 - klavye - 25-01-2019

(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.


Önermiyorum - 4 - yhackup - 25-01-2019

(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.