var db = DatabaseFactory.GetDbObject(); var gen = QueryGeneratorFactory.GetDbObject(ParameterMode.Global); string sql = @" select * from employees e where e.employee_id = (select max(employee_id) from employees where salary > .p.SALARY and commission_pct > .p.COMMISSION) "; gen.SelectText = sql; gen.AddFilterParameter("SALARY", 8000); gen.AddFilterParameter("COMMISSION", 0.1d); var dt = db.ExecuteQueryDataTable(gen.GetSelectCommandBasic());
Burada karmaşıklığı artırmak için iç içe select cümlecikleri kullandık ve iç cümleciğe parametrik olarak bir değer gönderdik. Global parametre tanımında parametre tanımlaması ".p." prefiksi kullanılarak yapılmaktadır. Örnekte gösterildiği gibi "SALARY" isimli parametre ".p.SALARY" olarak tanımlanmıştır. Neden ".p." gibi bir şey prefiks olarak tercih edildi diye soracak arkadaşlar için burada karmaşık bir derleyiciye sahip olmadığımız için örüntü (pattern) olarak yazılabilecek sql cümlecikleri içinde en az denk gelebilecek bir yapıyı tercih etmemiz gerekiyordu diye soruyu cevaplayabilirim. Yukarıdaki kod çalıştırıldığında sonuç DataTable olarak elde edilecektir.
"Bu yazıda "Oracle Managed Provider", Oracle 11g Express Edition ve HR şeması test verileri kullanılmıştır."
"https://github.com/vyigity/ProjectBase"
No comments:
Post a Comment