PLSQL DE BİLİNEN CURSOR TİPLERİ VE KULLANIMI
1)Implicit Cursor
Kullanımı Oracle Database’ ine ait olan cursor tipleridir. Bu tip cursor’ları kullanıcı(developer) lar aktif olarak kullanamazlar. Open/fetch/Close işlemi database tarafından ihtiyaç halinde gerçekleştirilir. Konuyu biraz detaylandırarak aşağıdaki şekile bir göz atalım :
SQLite
SQLite
Hamza henüz yazarlar kısmında yer almadığı için yazısını Yusuf Arslan altında yayınlıyoruz.En kısa zamanda Hamza adına yayınlayacağız
Bu yazı daha önce saltokunur.org e-dergide yayınlanmıştır.
Şu senaryodaki durum masaüstü uygulamalar geliştiren çaylak-tecrübeli tüm geliştiricilerin başına gelebilir. Benim başına geldi oradan biliyorum J
Programcının Çilesi
Hikâyemizde geliştiricimiz güzel bir program fikri bulur. Fikri gerçekleştirmek için platform, uygulama çatısı (Framework), programın yazılacağı dil... vb hazırdır. Geliştiricimiz programın işleyeceği verileri bir veri tabanında tutup, ilişkisel veri tabanlarının nimetlerinden faydalanmak istemektedir. İşte sorun da tam burada baş gösterir. Veri tabanı sunucusuna nasıl erişecektir? Uygulama masaüstü uygulama olduğu için çalışması için internet bağımlılığının olmaması gerekmektedir. Günümüz Türkiye şartlarında programı kullanan bütün bilgisayarların internete bağlı olamayacağı, olanların da zırt pırt kesilen bağlantı yüzünden programı adam gibi kullanamayacağı açıktır. Hem programcımız bu riski göze alıp, programı sürekli çevrimiçi olan veri tabanı (VT) sunucusuna bağlarsa, ücretsiz dağıttığı bir uygulama için bir VT sunucusu kiralamak zorunda kalacak, gelecekte belki programın kullanıcı kitlesi genişlediğinde o kadar veriyi tutacak VT sunucusu (VTS) bile bulamayabilecektir. Burada bir çözüm VTS'yi localhost'a kurup verileri bu şekilde işlemek olabilir. Ama şöyle bir gerçek var ki son kullanıcıların hepsi bir VT Yöneticisi değil. Düşünün bir kere dünyanın en çok kullanılan (bu yazıdan sonra aslında 2. olduğunu anlayacağınız :) MySQL'i uygulamanızla birlikte dağıttığınızı. Bugün en güncel MySQL 5.1 sürümü 104 MB, bir önceki 5.0 sürümü 22 MB [1]. Bu boyutta bir programı uygulama ile birlikte dağıtmak, kurulum dosyasını şişirmeye yarar, başka bir şeye değil. Hem MySQL'i kurduğumuzu düşünelim, kurmakla bitmiyor ki, root şifresi ayarlanacak, programın kullanacağı VT uygun karakter-kodlamayla oluşturulacak, MySQL hata verdiği zaman takip edilip düzeltilecek, dahası Windows güvenlik duvarı çalışmasına izin vermeyecek, gerekli olan port kullanımda olacak ve MySQL servisi başlatılamayacak. Biraz abartı gelebilir ama bu sorunlarım hepsi Windows üzerinde MySQL çalıştırılmak istenirken çok sık karşılaşılan sorunlar. Son kullanıcı bu sorunların hiçbiriyle baş edemez, onun için sadece "Next" vardır. "Next-Next-Next-(Bazen de Install :)"
Çözüm
Bu sorunun bir çözümü şu olabilir. Tecrübeli programcıların bile "Benden-Uzak-Allah'a-Yakın-Olsun" dediği, verileri bir dosyaya kaydetmek. Evet, çözüm basit gibi gözükse de programın işleyeceği verilerin yapısı karmaşıklaştıkça (bir VT'deki foreign key, trigger, function gibi yapıların getirdiği kolaylıkları düşünün) bunları bir dosya yapısına dökmek çoğu zaman geliştiricileri projelerinden soğutuyor. İşte bu ahval ve şerait içinde şöyle dediğinizi duyar gibiyim: "Keşke şöyle ne internete, ne sunucuya ne de ayara ihtiyaç duyan bir küçük program-kütüphane (library) olsa da, verileri VT biçiminde bir dosyaya kaydetse..."
Aslında yukarıda tırnak içinde yaptığım tanım SQLite için en basit ve anlaşılır tanım oldu. SQLite sunucu olmadan çalışan, hafif, küçük (tek bir dosya ve 500 KB den az), hiçbir ayara ihtiyaç duymayan, hızlı, SQL komutları kullanarak veri alış-verişi yapabilen bir ANSI-C kütüphanesidir. Kullanımı ise çok basittir. SQLite'ın kütüphane dosyasına (sqlite3.dll) SQL komutları gönderirsiniz, o da bu komutları işler ve bir VT dosyasına kaydeder. İstediğiniz zaman da SELECT sorguları çekerek bu dosyadan verilerinizi alabilirsiniz. Bu işlemler için ne bir ayar ne de bir kurulum gereklidir.
SQLite
SQLite, ilk olarak D. Richard Hipp tarafından geliştirilmeye başlandı ve 17 Ağustos 2000 tarihinde ilk sürümü yayınlandı. [2] İlk yayınlandığından bugüne kadar ki geçen zaman içinde temel VT işlemlerinin neredeyse tamamını gerçekleştirebilecek şekilde geliştirildi. Bu yazı yazıldığında en güncel sürümü 3.6.17 idi.
SQLite sadece bir C Kütüphanesi olduğu için, taşınabilirliği çok yüksektir. Günümüzün bilinen tüm platformlarında çalışabilir. Windows, Mac OS X, Linux, BSD, Solaris, UNIX, AmigaOS, Symbian, z/OS 1. [2]Gelecekte başka bir Veri Tabanı Yönetim Sistemi (VTYS)'ne geçilmek istendiğinde basit bir SQL sorgusuyla tüm veri alınıp rahatça diğer bir VTYS’ye geçilebilir.
Lisanslama
SQLite "Halka Açık" bir yazılımdır. Dağıtımı “Public Domain” [3] altında yapılmaktadır. Kaynak kodu açıktır. Yani SQLite'i istediğiniz gibi kullanabilir, kodunu değiştirebilir (uygulamanızın kullanmayacağı özellikleri kaldırıp yeni özellikler ekleyebilir), ücretsiz-ticari, açık-kapalı kaynak bütün uygulamalarda hiçbir kısıtlama altına girmeksizin kullanabilir, SQLite ile geliştirdiğiniz bir uygulamadan gelir de elde edebilirsiniz.
Teknik Özellikler [2]
Teknik özelliklerinden bahsetmek gerekirse SQLite için boyundan büyük işler başarıyor diyebiliriz.
- En Fazla VT dosyası boyutu: 32 TB
- Bir Tablodaki En Fazla Sütun Sayısı: 32767
- En Fazla Metin (String-Char) Veri Boyutu: 1 GB
- En Fazla Blob (Binary) Veri Boyutu: 1 GB
- En Fazla Number (Int-Double) Veri Boyutu: 64 bit
SQLite’in bir güzel özelliği de tam Unicode desteği sağlamasıdır. UTF-8 ve UTF-16 kodlamayı destekler.
SQLite transactional (işlemsel) bir VT kütüphanesidir. Sık kullanılan birçok ilişkisel SQL cümleciğini destekler. Bunlar: Union, Intersect, Except, Inner join, Outer join, Inner select, Merge join. Ayrıca VT içinde Trigger tanımlamaya da izin verir.
Tarih (date) veri tipini ve data domain, cursor, function, procedure gibi işlemleri desteklememesi SQLite’in şu anki sürümü itibariyle eksik yönleri.
SQLite'in en geniş dağıtıma ulaşmış VT motoru olduğu tahmin ediliyor. Bugün birçok program, işletim sistemi, cep telefonu, PDA hatta Mp3 oynatıcılar bile gömülü olarak SQLite kullanıyor. SQLite siz farkına bile varmadan çoktan bilgisayarınıza girmiş olabilir. Örnek vermek gerekirse, Firefox (120 milyon kopya) internet geçmişinizi tutmak için bir SQLite VT'si kullanıyor. Eğer Windows ortamında Firefox kullanıyorsanız "C:\Program Files\Mozilla Firefox" dizini altında "sqlite3.dll" dosyasını bulabilirsiniz. Ya da bir müzik oynatıcı olan AIMP2 şarkı listelerini yine SQLite VT'sinde tutuyor. Bunun Linux dünyasındaki karşılığı ise KDE kullanıcılarının çok iyi bildiği amorak. Yine amorak playlist'lerini SQLite VT'sinde saklıyor. Örnekler çoğaltılabilir, bugün PHP5 (20 milyon kopya) varsayılan olarak SQLite desteğiyle geliyor. Solaris (10 milyon kopya) sistemi boot ekmek için, Philips mp3 çalarlar yine playlist'leri saklamak için, Skype (100 milyon kopya), iPhone da SMS’leri saklamak için hep gömülü olarak SQLite kullanıyor. Tüm bu dağıtımların toplamının yaklaşık 300 milyon olduğu tahmin ediliyor. Bu da SQLite’i dünyanın en geniş dağıtımlı SQL motoru yapıyor. [4]
Kullanımı
SQLite harici uygulama olarak çalıştırılacaksa Linux'ta konsoldan ya da Windows'ta komut satırından "SQLite3 vt_dosyasi_adi" komutuyla çalıştırılır. vt_dosyasi_adi dosyası yoksa SQLite kendi oluşturur. Bundan sonra (;) ile biten SQL komutlarını programa girerek normal bir VT sunusu gibi kullanılır.
SQLite’in VT hakkında bilgi veren ve üzerinde çeşitli işlemler yapan, komut satırından çalıştırılan bazı özel komutları da vardır. [8]
- · Veritabanındaki tabloları görmek: sqlite> .tables
- · Veritabanı konsolundan çıkmak: sqlite> .exit
- · Kolon adlarını almak: sqlite> pragma table_info(
)
- · Yardım: sqlite> .help
- · Select çıktısına format vermek:
- · Otomatik artan kolonun son değerini ele almak: sqlite> select last_insert_rowid();
- · Veritabanını dışa aktarmak: sqlite> .dump
- · Veritabanını sql scriptine aktarır:
- · Konsolda veritabanını kopyalamak:
- · SQL script ile veritabanında tablolar oluşturmak:
SQLite kütüphanesi bir program içinde gömülü olarak kullanılacaksa "#include
SQLite'i gömülü olarak kullanmak için ille de C bilmeniz gerekmiyor. SQLite'in bilinen programlama dillerinin neredeyse tamamı için (C#, D, Delphi, Fortran, Java, Perl, PHP, Python, Ruby, Smalltalk…) sarıcı (wrapper) API’leri bulunuyor.[6] Böylece istediğiniz dilde uygulama geliştirirken SQLite’i kullanabiliyorsunuz.
Hız Karşılaştırmaları [7]
SQLite diğer VTYS'lerle karşılaştırıldığında INSERT sorgularında biraz geride kalıyor ama SELECT sorgularında çok daha hızlı sonuçlar veriyor.
Aşağıda SQLite 2.7.6, PostgreSQL 7.1.3 ve MySQL 3.23.41 kullanılarak yapılan hız testlerinin sonuçları yer alıyor. Süreler saniye cinsindendir. SQLite’in Nosync değerleri thread senkronlaması kapatılarak alınmıştır.
|
25000 INSERT Bir sorguda |
100 SELECT indeksiz |
1000 UPDATE indeksiz |
SELECT’ten INSERT |
DELETE indeksli |
5000 SELECT indexli |
PostgreSQL |
4.900 |
3.629 |
1.739 |
61.364 |
1.316 |
4.614 |
MySQL |
2.184 |
2.760 |
8.410 |
1.537 |
2.262 |
1.270 |
SQLite |
0.914 |
2.494 |
0.637 |
2.787 |
2.068 |
1.121 |
SQLite (nosync) |
0.757 |
2.526 |
0.638 |
1.599 |
0.752 |
1.162 |
SQLite üzerinde daha geniş araştırma yapmak isteyenler www.sqlite.org daki wiki'de kullanım, yönetim, bakım hakkında çok yararlı makaleler bulabilirler.
Kaynaklar
[1] www.mysql.com
[2] http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems
[3] http://en.wikipedia.org/wiki/Public_Domain
[4] http://sqlite.org/mostdeployed.html
[5] M. Ali Vardar, Linux ve UNIX Sistemler İçin Açık Kaynak Kodlu Yazılım Geliştirme, Temmuz 2008
[6] http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers
[7] http://www.sqlite.org/speed.html
[8] http://gurcanyavuz.wordpress.com/2009/04/15/sqlite-veritabani/
Hamza Apaydın
SPFILE'da değişiklik yapabilmek.
SPFILE'da değişiklik yapabilmek.
SPFILE, oracle'ın başlangıç parametrelerinin bulunduğu binary bir dosyadır. Oracle bu teknolojiye 9i versiyonunda geçti. Geçmesinin en büyük sebebi ise INITora dosyasında yapılamayan dinamik parametre değişiklikleri oldu.
Artık "alter system" yazarak spfile ile açılmış veritabanında izin verilen değişiklikleri "scope=both" yazarak hem bulunduğumuz session için hemde sonra ki startuplarda geçerli olmak üzere kaydedebiliyoruz. Bu değişiklikleride istersek initora dosyasında elle yapıp, ardından "create spfile from pfile" diyerek ya da "alter system" komutu ile yapabiliriz.
Oracle E-Business Suite Development & Extensibility Handbook
Product Description
Extend and Customize Oracle E-Business Suite
Transform your Oracle E-Business Suite infrastructure to suit enterprise requirements using the comprehensive development methods in this Oracle Press guide. Oracle E-Business Suite Development & Extensibility Handbook lays out each tool alongside reusable code and step-by-step examples. Learn how to create multiorg objects, integrate Java and PL/SQL, design custom user interfaces, and use Oracle Application Framework and Oracle Workflow. This detailed volume also explains how to work with Oracle XML Gateway, publish dynamic business intelligence reports, and tune your configuration.
Expert Oracle Practices: Oracle Database Administration from the Oak Table
Product Description
This book is an anthology of effective database management techniques representing the collective wisdom of the OakTable Network. With an emphasis upon performance—but also branching into security, national language, and other issues—the book helps you deliver the most value for your company’s investment in Oracle Database technologies. You’ll learn to effectively plan for and monitor performance, to troubleshoot systematically when things go wrong, and to manage your database rather than letting it manage you.
Oracle Database 10g Performance Tuning Tips & Techniques
Product Description
"Offers hundreds of hints, tips, and tricks of the trade that can be useful to any DBA wanting to achieve maximum performance of Oracle applications. No Oracle library would be complete without this book." --Ken (Dr. DBA) Jacobs, Vice President of Product Strategy for Server Technologies, Oracle Corporation
"Rich is the first and last stop for Oracle Database technology and performance tuning. His knowledge is a vital tool that you need to successfully negotiate the waters of Oracle database development." --Mike Frey, Principal Architect, Navteq
Oracle Database 11g PL/SQL Programming
Product Description
Deliver dynamic, client/server PL/SQL applications with expert guidance from an Oracle programming professional. With full coverage of the latest features and tools, Oracle Database 11g PL/SQL Programming lays out each topic alongside detailed explanations, cut-and-paste syntax examples, and real-world case studies. Access and modify database information, construct powerful PL/SQL statements, execute effective queries, and deploy bulletproof security. You'll also learn how to implement C, C++, and Java procedures, Web-enable your database, cut development time, and optimize performance.
Oracle Pl/sql Programming In Simple Steps
Oracle Pl/sql Programming In Simple Steps
Kogent Learning Solutions Inc. | 2008 | ISBN: 8177228552 | 240 pages | PDF | 12 MB