Arşiv

Posts Tagged ‘sysdate’

pl/sql de sysdate değerini değiştirme


Merhaba
Pl/Sql ortamında yazdığımız programlarda çoğu zaman sysdate bilgisini kullanırız. Bazı durumlarda yazığımız uygulamaların sistem zamanı olan sysdate değerine göre değil de ileri ya da geri bir zamanda çalışmasını isteriz. Bu gibi durumlarda yazığımız kod içerisinde tarih değerlerimizi değiştirebiliriz. Fakat sysdate olarak tanımlı olan tarih değerleri bu değişimden etkilenmezler.

Bu gibi durumlar için sysdate değerini de değiştirmeliyiz. Bu işlem için sistemin fixed_date özelliğindeki değeri değiştirip sysdate değerimizi değiştirmiş oluruz.

Örnek olarak şuanki sysdate değerimi alalıım ve bu değeri gelecek ve geçmiş zaman değerleri ile değiştirelim. Bu net olarak görebilmek için bir declare yazabiliriz. Aşağıdaki kod ile sysdate değerinin değişimi görebilirsiniz.

declare
begin
  dbms_output.put_line('Şuanki sysdate değeri : ' || to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss'));
end;

Bu kod çalıştığında sysdate değerimiz aşağıdaki gibi olacaktır.

Şuanki sysdate değeri : 02/03/2013 19:25:14

Şimdi aşağıdaki kod ile sysdate değerini geçmiş bir zamana atayalım ve sonucunu görelim.

  -- Bu komut ile sysdate değerini belirtilen format ile istediğimiz zamana ayarlıyoruz.
  alter system set fixed_date = '2013/01/01 01:01:01';

Bu atamadan sonra tekrar sysdate değerine baktığımızda sonuç aşağıdaki gibi olacaktır.

declare
begin
  dbms_output.put_line('Yeni atanan geçmiş sysdate değeri : ' || to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss'));
end;

Bu kod çalıştığında sysdate değerimiz aşağıdaki gibi olacaktır.

Yeni atanan geçmiş sysdate değeri : 01/01/2013 01:01:01

Geçmiş bir tarih atamasını sorunsuz olarak yaptık. Şimdi de gelecek bir tarih için atama yapalım.

  -- Bu komut ile sysdate değerini belirtilen format ile istediğimiz zamana ayarlıyoruz.
  alter system set fixed_date = '2014/02/02 02:02:02';

Bu atamadan sonra tekrar sysdate değerine baktığımızda sonuç aşağıdaki gibi olacaktır.

declare
begin
  dbms_output.put_line('Yeni atanan gelecek sysdate değeri : ' || to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss'));
end;

Bu kod çalıştığında sysdate değerimiz aşağıdaki gibi olacaktır.

Yeni atanan gelecek sysdate değeri : 02/02/2014 02:02:02

Tüm bu değişim işlemlerini yaptıktan sonra sysdate değerimizi eski haline almak için ise aşağıdaki kodu çalıştırmamız yeterlidir.

  -- Bu komut ile sysdate değerini eski haline alıyoruz.
  alter system set fixed_date = none;

Bu atamadan sonra tekrar sysdate değerine baktığımızda sonuç aşağıdaki gibi olacaktır. Tabi bu arada arka planda sysdate değeri ilerlediği için şuanki zaman ne ise o değeri göreceğiz.

declare
begin
  dbms_output.put_line('Şuanki sysdate değeri : ' || to_char(sysdate, 'dd/mm/yyyy hh24:mi:ss'));
end;

Bu kod çalıştığında sysdate değerimiz aşağıdaki gibi olacaktır.

Şuanki sysdate değeri : 02/03/2013 19:43:52

Artık istediğimiz gibi bu değeri değiştirip kodlarımızda gerekli kontrol ve düzenlemeleri yapabiliriz.
Kolay gelsin.

c# console application oracle database connection and execute query örnek

04 Şubat 2011 2 yorum

Merhaba,
C# ile bir veri tabanı bağlantı kurmak ve bu bağlantı sayesinde basit bir sorgu çalıştırmak için yapmamız gereken işlemleri adım adım inceleyelim. Öncelikle ben bu işlem için bir console uygulaması ve oracle veri tabanı kullanacağım. C# da yeni bir console uygulaması için proje oluşturduktan sonra oracle veri tabanı bağlantısı için Oracle.DataAccess.dll nesnesini kullanacağız. Bu nesneyi projemize referans olarak eklemeliyiz. Oracle.DataAccess.dll nesnesini projemizde referans olarak ekledikten sonra uygulamamızı hazırlayabiliriz.

using System;
using Oracle.DataAccess.Client;
using System.Data;

namespace ConsoleDBConnection
{
    class Program
    {
        static void Main(string[] args)
        {
            OracleConnection conn = new OracleConnection();
            string txtQuery = "select sysdate from dual;";
            OracleCommand cmd = new OracleCommand(txtQuery);
            string username;
            string password;
            string dbname;

            Console.WriteLine("Console Application Oracle Bağlantısı Uygulaması\n");

            #region Connection String

            Console.WriteLine("Kullanıcı Adı Giriniz");
            username = Console.ReadLine();
            Console.WriteLine("Şifre Giriniz");
            password = Console.ReadLine();
            Console.WriteLine("Database Adı Giriniz");
            dbname = Console.ReadLine();
            Console.WriteLine("\n");

            conn.ConnectionString =
                          "Data Source=" + dbname + ";" +
                          "User id=" + username + ";" +
                          "Password=" + password;

            #endregion

            Console.WriteLine("Bağlantı Kurmak İçin Bir Tuşa Basın\n");
            Console.ReadLine();

            #region Open the connection

            try
            {
                conn.Open();
                Console.WriteLine("Oracle Database Bağlantısı Başarı İle Yapıldı !\n");
                Console.WriteLine("Sistem Saatini Sorgulama İçin Bir Tuşa Basın\n");
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadLine();
            }

            #endregion

            cmd.Connection = conn;
            cmd.CommandType = CommandType.Text;

            #region Execute Query

            try
            {
                OracleDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    Console.WriteLine("Sorgu Sonucu : "+reader.GetDateTime(0)+"\n");
                    Console.WriteLine("Çıkmak İçin Bir Tuşa Basın !");
                    Console.ReadLine();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadLine();
            }
            finally
            {
                cmd.Dispose();
                conn.Close();
                conn.Dispose();
            }

            #endregion

        }
    }
}

Uygulamamız artık hazır. Uygulamayı çalıştırıp doğru bir şekilde veri tabanı bağlantısı yapıp yapılmadığı ve istenilen sorgunun çalıştırılıp çalıştırılmadığını kontrol edelim.

Ekran görüntülerinden de anlaşılacağı gibi başarılı bir şekilde veri tabanı bağlantımızı yaptık ve hazırladığımız sorguyu çalıştırıp sonucunu görebildik.
Kolay gelsin.

pl/sql de iki tarih arası farkı bulma

28 Haziran 2010 4 yorum

Merhaba,

Bazı özel durumlar için yazdığımız function , procedure ya da declare içinde iki tarih arasındaki farkı bulmamız gerekiyor.Bu işlem için basit olarak “tarih1-tarih2” gibi bir satır ile işlem çözülebilir. Fakat bu iki tarih arasındaki farkı daha detaylı görmek (yil,ay,gün,saat,dk,sn gibi)için aşağıdaki declare satırı kullanılabilinir.Bu declare satırı ihtiyaç durumunda bir function yapılabilir ya da bir procedure içinde kullanılabilinir.

DECLARE
  yil             NUMBER;
  ay              NUMBER;
  gun             NUMBER;
  saat            NUMBER;
  dk              NUMBER;
  san             NUMBER;
  baslangic_tarih DATE;
  bitis_tarih     DATE;
  sonuc           VARCHAR2(1000);
BEGIN

  baslangic_tarih := to_date('11-09-2009 20:15:10', 'dd-mm-yyyy hh24:mi:ss');
  bitis_tarih     := SYSDATE;
  /*************************************************************************************
-- Eski okuma bilgisi. Tam gün hesaplaması olmadığı için birgün eksik bilgi geliyordu.
-- Aşağıdaki yeni sql ile bu sorun çözüldü.
--    BEGIN
--      SELECT to_number(substr(zaman, 1, 4)) - 2000 yil,
--             to_number(substr(zaman, 6, 2)) - 01 ay,
--             to_number(substr(zaman, 9, 2)) - 01 gun,
--             substr(zaman, 12, 2) saat,
--             substr(zaman, 15, 2) dk,
--             substr(zaman, 18, 2) san
--        INTO yil,
--             ay,
--             gun,
--             saat,
--             dk,
--             san
--        FROM (SELECT to_char(to_date('20000101', 'YYYYMMDD') + (SELECT (bitis_tarih - baslangic_tarih) fark FROM dual), 'YYYY MM DD HH24:MI:SS') zaman
--                FROM dual)
--       WHERE rownum < 2;
--    EXCEPTION
--      WHEN OTHERS THEN
--        dbms_output.put_line('Sql de bir hata ile karşılaşıldı.');
--    END;
  **************************************************************************************/

  BEGIN
    SELECT trunc(months_between(bitis_tarih, baslangic_tarih) / 12) yil,
           trunc(MOD(months_between(bitis_tarih, baslangic_tarih), 12)) ay,
           trunc((months_between(bitis_tarih, baslangic_tarih) - trunc(months_between(bitis_tarih, baslangic_tarih))) / 0.032258064516129) gun,
           substr(zaman, 12, 2) saat,
           substr(zaman, 15, 2) dk,
           substr(zaman, 18, 2) san
      INTO yil,
           ay,
           gun,
           saat,
           dk,
           san
      FROM (SELECT to_char(to_date('20000101', 'YYYYMMDD') + (SELECT (bitis_tarih - baslangic_tarih) fark FROM dual), 'YYYY MM DD HH24:MI:SS') zaman
              FROM dual)
     WHERE rownum < 2;
  EXCEPTION
    WHEN OTHERS THEN
      dbms_output.put_line('Sql de bir hata ile karşılaşıldı.');
  END;
  sonuc := 'İki Tarih Arası Fark' || ' ( ' || to_char(bitis_tarih, 'dd-mm-yyyy hh24:mi:ss') || ' - ' ||
           to_char(baslangic_tarih, 'dd-mm-yyyy hh24:mi:ss') || ' )' || chr(10);
  sonuc := sonuc || ' ' || to_char(yil, '999') || ' Yıl ' || to_char(ay, '99') || ' Ay ' || to_char(gun, '99') || ' Gün ' || to_char(saat, '09') ||
           ' Saat ' || to_char(dk, '09') || ' Dakika ' || to_char(san, '09') || ' Saniye';

  dbms_output.put_line(sonuc);

END;

Görüldüğü gibi yazılan bu declare da iki tarih arasındaki tüm farklar alınmış durumdadır.Artık ihtiyacımız olan fark hangisi ise istenildiği gibi kullanılabilir.

pl/sql sysdate ile ilgili bir kaç kullanım.

15 Kasım 2009 2 yorum

Bulunduğumuz günün adınıa almak için

select  to_char(sysdate,'DAY') from dual >> 'SALI'

ya da

select  to_char(sysdate,'Day') from dual >> 'Salı'

Bulunduğumuz ayın son günü bilgisini almak için

select last_day(sysdate)  from dual >> '31.10.2009'

Bulunduğumuz aya parantez içerisindeki virgülden sonra girilen sayı kadar ay ekleyerek bize gelen sonuç

select  add_months(sysdate,2) from dual >> '20.12.2009'
Kategoriler:Database, Forms, Oracle, PL/SQL, Reports Etiketler:, ,