<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3505418659957917685</id><updated>2012-02-16T15:35:06.963-08:00</updated><title type='text'>Turkcell Staj</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://turkcellstaj.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://turkcellstaj.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Süleyman Diker</name><uri>http://www.blogger.com/profile/01201506146614815559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3505418659957917685.post-2756218435875335544</id><published>2008-08-27T23:27:00.000-07:00</published><updated>2008-08-28T05:56:25.178-07:00</updated><title type='text'>BUSINESS INTELLIGENCE</title><content type='html'>Neden İş Zekası Demişler?&lt;br /&gt;Bu kavram ilk olarak 1989 yılında Gartner Inc. firmasında analist olarak araştırma yapan Howard Dresner tarafından kullanılmıştır. O tarihe kadar DSS (decision support system) ve EIS (executive information system) gibi karışıklık yaratan kavramlar kulanılmaktaydı. Burada zekadan çok aslında bir yönlendirme söz konusu. Business Intelligence uygulamaları sayesinde karar vericiler,stratejik ve operasyonel kararlarında daha doğru ve hızlı adımlar atabilmektedirler.&lt;br /&gt;Bu yazımızda Business Intelligence kapsamında Dataware house yapısından ,özelliklerinden ; ETL nedir, nasıl işler ondan bahsedelim...&lt;br /&gt;DATAWAREHOUSE ÖZELLLİKLERİ&lt;br /&gt;&lt;br /&gt;  1. 1- Database'de sorgularımız kişi bazında olur.&lt;br /&gt;  2. 2- Bir çok kaynak sistemden veri alındığı için bütünleşik bir yapı vardır.&lt;br /&gt;  3. 3- Değişkenlik göstermeyen data yapısı içerir.&lt;br /&gt;  4. 4- Historik datalar saklanır.&lt;br /&gt;&lt;br /&gt;OLTP SİSTEMLER İLE DWH ARASINDAKİ FARKLAR dan bahsedecek olursak&lt;br /&gt;OLTP sistemler sadece önceden tanımladığımız operasyonlar , fonksiyorlar için geçerlidir fakat dataware house'da ise o iş için özel olarak tamınlamış sorgular söz konusudur.OLTP sistemler hızlı çalışan ve sürekli sistemin update edildiği sistemlerdir, DHW de ise haftalık , aylık, vb... update run' ları çalıştırılabilir.Sorgu yapısına örnek verecek olursak satış-pazarlama bazında verşi ambarının inceleyecek olursak sorgumuz " Bu kampandan en cok yararlanan müşteri kim?" iken eğer bu soru OLTP sisteme uyarlanacak olursa şu şekilde değişebilir : "Bu kampanyadan elde edilen toplam gelir ne kadardır?" DWH özneye yönelik iken , OLTP nesnelere yönelik sorguları destekler.&lt;br /&gt;Veri ambarınızı temsilen farklı farklı mimariler kullanabilirsiniz.&lt;br /&gt;&lt;br /&gt;  1. Basic Model : Kaynak sistemlerden verinin geldiği, veri ambarında toplandıgı ve kullanıcılara açıldığı mimari.&lt;br /&gt;  2. Ara Katmanlı Model : Veri ambarına verinin gönderilmeden önce ara bir katmanda toplandığı mimari.&lt;br /&gt;  3. Ara Katmanlardan ve Data Martlardan oluşan Model : Verinin kullanıcılara açılmadan önce çeşitli data martlarda toplandığı mimari.&lt;br /&gt;&lt;br /&gt;ETL NEDİR ?&lt;br /&gt;ETL verinin Kaynak sistemlerden seçilip , taşınıp hedef sisteme yüklenmesidir. (Extraction , Transformation , Loading 'in kısaltması)&lt;br /&gt;EXTRACTION ile başlayacak olursak : Kaynak sistemden data almak dedik, bunu yaparken 2 yolla yapabiliriz&lt;br /&gt;&lt;br /&gt;  1. Full Extraction : Her seferinde kaynak sistemden bir alım yapacaksak bütüm veriyi alıyoruz.&lt;br /&gt;  2. Incremental Extraction : Fakat ıncrementalda "son run'dan" sonraki veriyi aktarıyoruz sadece.&lt;br /&gt;&lt;br /&gt;TRANSFORMATION : DWH mimarisi olarak Ara katmanlı ve Data martlardan oluşan yapıdan bahsettik. Bu da bize şunu gösteriyor. Data :&lt;br /&gt;&lt;br /&gt;  1. Kaynak sistemden ara katmana&lt;br /&gt;  2. Ara katmandan veri ambarına&lt;br /&gt;  3. Veri ambarından data martlara taşınıyor...&lt;br /&gt;&lt;br /&gt;Bu taşınma işlemi heterojen yapılar için(farklı farklı database'ler ya da farklı işletim sistemlerinin taşınmasında) FTP ile ya da Tablespace ler ile yapılıyor.&lt;br /&gt;LOADING : Kaynak sistemden alınan veri son aşama olarak da hedef sisteme yükleniyor. Eğer elimiz de Unix file'ler ya da tablolar varsa bunlar SQL Loader ya da Extern Table'lar ile Hedef sisteme taşıyoruz .&lt;br /&gt;Böylece ETL sürecimiz sonlanmış oluyor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3505418659957917685-2756218435875335544?l=turkcellstaj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://turkcellstaj.blogspot.com/feeds/2756218435875335544/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3505418659957917685&amp;postID=2756218435875335544' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/2756218435875335544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/2756218435875335544'/><link rel='alternate' type='text/html' href='http://turkcellstaj.blogspot.com/2008/08/business-intelligence.html' title='BUSINESS INTELLIGENCE'/><author><name>Gözde ALHAN</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3505418659957917685.post-5766233020627303564</id><published>2008-08-17T04:04:00.000-07:00</published><updated>2008-08-17T04:19:22.829-07:00</updated><title type='text'>Mobil Uygulama Geliştirme</title><content type='html'>&lt;p&gt;Not: Bu yazıya &lt;a href="http://ozansafi.wordpress.com/2008/08/17/mobil-uygulama-gelistirme/"&gt;buradan&lt;/a&gt; da ulaşabilirsiniz.&lt;/p&gt;&lt;p&gt;Merhaba arkadaşlar,&lt;br /&gt;&lt;br /&gt; Bu yazıda mobil uygulama geliştirmede hedefleyebileceğiniz çeşitli platformlardan, bunlar için uygulama geliştirilebilecek programlama dillerinden, kullanabileceğiniz IDElerden, ve telefon spesifik SDKlardan bahsedeceğim. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Platformlar&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;     Aslen 2 ana platform var. &lt;strong&gt;Symbian&lt;/strong&gt; ve &lt;strong&gt;Windows Mobile&lt;/strong&gt;. En çok bunlar kullanılıyor.&lt;br /&gt;     &lt;strong&gt;Google Android&lt;/strong&gt; ve &lt;strong&gt;iPhone&lt;/strong&gt;'u da unutmamak lazım tabii; ancak onlar bu yazının konusu değiller.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Symbian'a &lt;strong&gt;JME&lt;/strong&gt;(Java Micro Edition) ve &lt;strong&gt;Symbian C++ &lt;/strong&gt;ile yazabiliyoruz. Ancak farketmişsinizdir; direk C++ yazmak yerine Symbian C++ yazdım; çünkü C++ biliyor olmanız rahat bir şekilde Symbian C++ da yazabileceğiniz anlamına gelmiyor. En basitinden Symbian C++'ta stringleri kullanamıyorsunuz; çünkü Symbian'ın yazılım geliştiricilere açtığı API'ler parametre olarak 'descriptor' adı verilen şeyler alıyor. Descriptorları kullanmalarının amacı string'leri yazılım geliştiriciler için daha güvenli bir hale getirmeleri imiş. Aynı zamanda descriptorlar unicode; c++ stringleri ise değil. Exception handling de dahil olmak üzere daha birçok konuda farklılıklar var. Ancak Symbian C++'a derinlemesine girmek istemiyorum; Symbian C++ cidden bir derya ve anlatılabilecek cidden çok fazla şey var.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Peki ya, neden Symbian C++'ı kullanıyoruz ki o zaman diyebilirsiniz; JME çok daha rahat yazılıyor sonuçta değil mi?&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Evet, aslında bir bakıma haklısınız; eğer birşeyi JME'de yapabiliyorsanız orda yapmalısınız, size çok zaman kazandıracaktır. Ancak, bazı özellikler telefonlardaki JME implementasyonları tarafından desteklenmiyor. Örneğin cell id'yi JME'den alamıyorsunuz; symbian telefonların büyük bir kısmında. Eski 3650'de alınabiliyordu diye hatırlıyorum, N96'da da alınabilecekmiş; ancak dediğim gibi, telefon üreticisinin buna izin vermesi gerekiyor. Bu tip durumlarda native(yerli) kod kullanarak hangi Symbian telefon olursa olsun, Symbian'ın bize açmış olduğu herşeye erişebiliyoruz. Ancak tabi bu sefer de Symbian işletim sistemi olmayan telefonlarda çalışmıyor :( Görüldüğü gibi, bu bir tradeoff aslında; hangisi sizin durumunuza daha uygunsa onu seçmelisiniz.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Başka bir husus da tabii doğal olarak Symbian C++'ta yazılmış bir uygulama JME'den daha hızlı çalışacaktır yerli kod olduğu için. Her 2 dildeki aynı özelliklere sahip uygulama geliştirme süreleri göz önüne alındığında, bu hız farkı çok da önemli olmayabilir tabi duruma göre. Symbian C++ ve JME karşılaştırması hakkında son bir cümle daha söyleyeyim ve bitireyim: Symbian C++ çok daha güçlü; ancak çok daha eziyetli de güzel bir kelime olurdu :)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Symbian'a aynı zamanda Python'la da yazabilirsiniz, ancak daha önce herhangi bir tecrübem olmadı, o yüzden pek fazla birşey yazamayacağım bu konuda.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Symbian'a .NET'le yazabiliyor olmak ister miydiniz? Birkaç sene önce aslında buna izin veren bir firmanın IDE'si(Appforge CrossFire) vardı, ancak daha sonra Oracle şirketin entellektüel mülkiyetini satın almıştı ve şirket operasyonlarına son vermişti. O zamandan sonra bu mümkün olmamıştı, ancak şimdilerde yine bir firma bir library aracılığı ile Symbian'a .NET uygulamaları yazılmasına izin veriyor. Ancak Net60 adı verilen bu library paralı ve sadece .NET CF 1.0 uygulamaların geliştirilmesine izin veriyor. Hali hazırdaki .NET CF 1.0 uygulamalarınızı Symbian'da çalıştırabiliyorsunuz böylece.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;      &lt;strong&gt;Windows Mobile&lt;/strong&gt;'a ise herhangi bir para ödemeden daha geniş bir dil havuzuyla yazabiliyoruz denebilir sanırım..&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Windows Mobile için uygulamalar daha çok .NET framework'ü ile ve C# ile yazılıyor; ancak bildiğiniz gibi .NET framework'ü aslında herhangi bir dile has değil, bildiğim kadarıyla yaklaşık bir 35-40 dilde yazılabiliyor. Ancak bunların hepsi 'managed' olmuş oluyor, yani .NET framework sonuçta hepsini tek bir dile çeviriyor. 'Managed' olmayan bir şekilde C++ ile yazmak da mümkün tabii. Aynı zamanda JME ile de yazabiliyorsunuz, ancak ben hiç denemedim. Benim gözlemlediğim, C# ile gerektiğinde DLL çağrıları yaparak istediğiniz herşeyi yazabildiğiniz. Ancak yine de önceden belirttiğimiz gibi uygulamanızın geniş bir telefon yelpazesinde çalışmasını istiyorsanız JME vazgeçilemez durumda şu an.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;IDEler&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;    IDE'leri inceleyecek olursak; JME uygulamaları için Mobility Pack'li Netbeans en iyi seçenek gibi gözüküyor.(Eclipse ME de bir seçenek) Windows Mobile uygulamaları için tabii ki Visual Studio'yu, ve son olarak Symbian C++ için Nokia'nın Eclipse'i baz olarak alıp ve onu geliştirerek yarattığı bedava olan Carbide.c++ IDE'sini kullanabiliriz. Aslında bazı özellikler sadece 1 aylığına bedava,(telefon üzerinde debuglama gibi) bundan sonra gerekli ücreti ödeyerek satın almanız isteniyor kullanmaya devam etmek için. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;SDKlar&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;    Ancak IDEler dışında, hedeflediğiniz telefon platformu ve işletim sistemi için gerekli SDK'ları(Software Development Kit) da yüklemeniz gerekiyor. Örneğin N95 için 3rd Edition Feature Pack 1 SDK'sını yüklemiştim ben, ona uygulama geliştirdiğimde. Aynı zamanda Windows Mobile için de işletim sistemi versiyonlarına göre ayrılıyor. Windows Mobile 5.0 veya 6.0 SDK gibi işletim sistemi versiyonuna uygun SDKyı yüklemeniz gerekiyor uygulama geliştireceğiniz sisteme. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;     Hangi SDK'yı yüklemem gerektiğini nasıl anlayabilirim diyorsanız; dostumuz Google'a "[telefonModeli] spec" tarzında aramalarda bulunarak, telefonun spesifikasyonunun olduğu bir sayfaya yönlenip oradan gerekli bilgiyi alabilirsiniz.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Evet, şimdilik bu kadar, umarım faydalı olmuştur, aklıma başka şeyler gelirse gerektiğinde eklemede bulunabilirim.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Ozan Safi&lt;br /&gt;Soru ve önerileriniz için: &lt;a href="mailto:ozansafi@gmail.com"&gt;ozansafi@gmail.com&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3505418659957917685-5766233020627303564?l=turkcellstaj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://turkcellstaj.blogspot.com/feeds/5766233020627303564/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3505418659957917685&amp;postID=5766233020627303564' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/5766233020627303564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/5766233020627303564'/><link rel='alternate' type='text/html' href='http://turkcellstaj.blogspot.com/2008/08/mobil-uygulama-gelitirme.html' title='Mobil Uygulama Geliştirme'/><author><name>Ozan Safi</name><uri>http://www.blogger.com/profile/13905912322706203540</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3505418659957917685.post-8575971783594593554</id><published>2008-08-14T06:24:00.001-07:00</published><updated>2008-08-14T06:25:12.251-07:00</updated><title type='text'>PARALLEL EXECUTION</title><content type='html'>Parallel Execution nasıl çalışıyor?&lt;br /&gt;&lt;br /&gt;Birazdan örnektede göreceğimiz gibi verdiğimiz paralellik komularıyla sql sorgumuzu processlere(unıt) ayırıyoruz.Oracle paralel bir sql sorgusunu çalıştırırken bir çok process eş zamanlı olarak çalıştırıyor.Sorguyu parçalara ayırma mantığıyla tek bir process'in bir işi yapması yerine birden cok process bir iş için çalışıyor. Yanlız bunları yaparken dikkat etmemiz gereken konulardan biri de şu : "Eğer sorgularımızı paralel çalıştırmak istiyorsak yeterli disk alanına ve CPU ya ihtiyacımız var. "&lt;br /&gt;&lt;br /&gt;Parallel Execution kullanılmadığında tek bir server process yapması gereken işleri sırasıyla yapıyor(full table scan) fakat sorguya paralellik verdiğimizde bir çok parallel execution server çalışıyor.Tablo dinamik olarak kordinatör tarafından execution anında kararlaştırılarak, parçalara bölünüyor ve her bir parça, bir parallel execution server tarafından işleniyor. Parçaların da bir araya gelmesi bize granülleri veriyor. Eğer elimizde bircok granül varsa , sırasıyla bir granül paralel işleniyor ve execution server bu granülü okumayı bitirdikten sonra diğer granüle geçiyor. Bu işlem elimizde birçok ufak processlerden oluşmuş granüller bitene kadar devam ediyor.&lt;br /&gt;&lt;br /&gt;Sunumu sırasında arkadaşımız "A.Fuat SUNGUR" parallel execution 'ın gerekliliğine dair güzel bir örnek vermişti. Düşünün ki bir yazıyı paragraf paragraf özetleyeceksiniz ve eğer bu özeti parallel execution mantığıyla her kişiye bir paragraf düşecek şekilde kişilere paylaştırırsanız anlamsız olur.Bunu bir kişinin yapması daha mantıkıdır. Bu güzel örnekten&lt;br /&gt;yola cıkarak SQL 'de de execution süresi kısa olan, az veri döndüren sorgularda Paralel Execution kullanmamalıyız. Peki ne zaman kullanmalıyız Parallel Execution'ı ?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Büyük boyutlu table scan , join , index scan yapmamız gerektiğinde ,&lt;/li&gt;&lt;li&gt;Büyük boyutlu indexler yaratmamız gerektiğinde ,&lt;/li&gt;&lt;li&gt;Fazla sayıda insert , update , merge veya delete olduğunda ,&lt;/li&gt;&lt;li&gt;Büyük boyutlu datayı sort etmemiz gerektiğinde kullanışlıdır.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Bu kullanımlarla :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Saatlerce sürecek bir işi daha kısa bir zaman diliminde bitirebilirsiniz.&lt;/li&gt;&lt;li&gt;Kaynakları daha verimli kullanırsınız (cpu,memory...)&lt;/li&gt;&lt;/ol&gt;ALTER table bigtab NOPARALLEL;&lt;br /&gt;/&lt;br /&gt;SELECT * FROM bigtab  ;&lt;br /&gt;--execution time=76.192 seconds&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ALTER table bigtab PARALLEL;&lt;br /&gt;/&lt;br /&gt;SELECT /*+ PARALLEL(T 16) */ owner,object_name FROM bigtab T ;&lt;br /&gt;--execution time=22.703 seconds&lt;br /&gt;&lt;br /&gt;                                                                                                         gzdalhan@gmail.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3505418659957917685-8575971783594593554?l=turkcellstaj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://turkcellstaj.blogspot.com/feeds/8575971783594593554/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3505418659957917685&amp;postID=8575971783594593554' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/8575971783594593554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/8575971783594593554'/><link rel='alternate' type='text/html' href='http://turkcellstaj.blogspot.com/2008/08/parallel-execution.html' title='PARALLEL EXECUTION'/><author><name>Gözde ALHAN</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3505418659957917685.post-8925620104748508329</id><published>2008-07-27T23:26:00.000-07:00</published><updated>2008-07-28T03:39:39.383-07:00</updated><title type='text'>Sürüm  Yönetimi</title><content type='html'>Yazılan program parçalarının , değiştirildikçe oluşan yeni yapısı versiyon kelimesiyle takip ediliyor. Şirketler "Clear Case" gibi ortak paylaşım platformlarına programlarını koyuyorlar. Test aşamasında hata alan programlar kontrol ediliyor ve düzeltilmiş halleri bu sefer farklı bir versiyon numarasıyla tekrar Clear Case'e yükleniyor.Sürüm yönetiminin isminden kaynaklı olarak yaptığı iş bu versiyonları takip etmek gibi algılansa da esasında o kadar da basit değil. Aksine bir o kadar karmaşık. Sürüm yünetimi yapan kişiler kodun her aşamasında yer alıyorlar aslında.Süreç müşteriyi, analizi, tasarımı, kodlamayı, testi ve deploymentı kapsıyor aslında.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Genel olarak Sürüm Yöneticileri :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;•IT servislerindeki değişimlere genel bakış sağlar ve teknik/teknik olmayan konuların birlikte yürütülmesini sağlar&lt;br /&gt;•Planning, design, build, scheduling, configuration ve testing yapar&lt;br /&gt;•Software, hardware ve diğer CI lardan sorumludur&lt;br /&gt;•Müşteri beklentilerini karşılanması için kominikasyon sağlar&lt;br /&gt;•DSL(Definitive Software Library) ve DHS(Definitive Hardware Store) kontrol eder bakımını yapar&lt;br /&gt;•Çıkan ürünlerin güvenirliklerini sağlar&lt;br /&gt;•Geri dönüş planlarını yaratır&lt;br /&gt;•Ürünlerin dağıtımı ve kurulumundan sorumludur.&lt;br /&gt;•Kodun okunması , yıllar sonraya taşınması , saklama ve performans standartlarının kotrollerinden sorumludur. Örnek verecek olursak nedir bu standartlar : Ben şirketimde Kodun çalışma performansını düşürmemek için 2 tane iç içe " if " ten fazlasını istemeyebilirim. Paket içinde her procedure 'ün sonunda "handling exception" mekanizması olacaktır diyebilirim ya da yorum satırları olmak zorundadır diyebilirim.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ZORLUKLAR &amp;amp;&amp;amp; AVANTAJLAR&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1-Kişi kontrol eden görevinde olduğu için tek proses ile tüm yapıyı kavramak ve anlamak zorundadır&lt;br /&gt;2-Kişi DSL ve DHS yapılarının kontrolünü ve bakımını yapabilmesi için bu yapılara hakim olmak zorundadır.&lt;br /&gt;3-Sürüm yönetimi bize "Standartların Oturtulması" gibi bir sonuç sağlar. Bir şirkette yapılacak işlerin standartlara oturtulması çözümleme , geliştirme , test ve bakım işlemlerini kolaylaştırır.&lt;br /&gt;4-Acil çözümlerin süreci delmesi : Tüm bu kontrollerin arasında patronunuz çok daha acil bir iş çıkarabilir ve sizin bunun aciliyetini bile sorgulamaya vaktiniz yoktur =)&lt;br /&gt;5-Kişiler çok miktarda değişimlerle başedebilmeli , servis kalitelerini yüksek tutmalıdırlar.&lt;br /&gt;Yanlış veya izinsiz yazılım kullanımını önlenmesi de sürüm yönetimi kapsmına giriyor.Şirketinizde herhangibir kişi PC ye yaptığı downloadlar üzerinden programlar gelştirebilir ama ileride öngörülemeyecek sorunlarla uğraşmamak adına yasallıklar kontrol edilmelidir.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3505418659957917685-8925620104748508329?l=turkcellstaj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://turkcellstaj.blogspot.com/feeds/8925620104748508329/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3505418659957917685&amp;postID=8925620104748508329' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/8925620104748508329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/8925620104748508329'/><link rel='alternate' type='text/html' href='http://turkcellstaj.blogspot.com/2008/07/srm-ynetimi.html' title='Sürüm  Yönetimi'/><author><name>Gözde ALHAN</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3505418659957917685.post-9220177241619718337</id><published>2008-07-26T07:51:00.000-07:00</published><updated>2008-07-28T03:35:04.870-07:00</updated><title type='text'>SQL, PL/SQL, and Java</title><content type='html'>&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5Ctemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:162; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman"; 	mso-fareast-language:EN-US;} @page Section1 	{size:595.3pt 841.9pt; 	margin:70.85pt 70.85pt 70.85pt 70.85pt; 	mso-header-margin:35.4pt; 	mso-footer-margin:35.4pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5Ctemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:162; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman"; 	mso-fareast-language:EN-US;} pre 	{margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Courier New"; 	mso-fareast-font-family:"Times New Roman";} @page Section1 	{size:595.3pt 841.9pt; 	margin:70.85pt 70.85pt 70.85pt 70.85pt; 	mso-header-margin:35.4pt; 	mso-footer-margin:35.4pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;Veritabanı ile içli dışlı olan birisiyseniz mutlaka SQL i duymuşsunuzdur.Sanırım,veritabanı sorgulama ve yönetim dillerinden birisi kendisi..Hem de neredeyse bütün ilişkisel veritabanı sistemleri ile iletişim kurabilme yeteneği sayesinde çok özel bir yere de sahip bir vatandaştır.&lt;br /&gt;&lt;br /&gt;SQL komutları iki alt grupta incelenir:&lt;br /&gt;&lt;br /&gt;1-DDL - Data definition Language (Veri tanımlama dili)&lt;br /&gt;2-DML - Data manipulation Language (Veri İşleme dili)&lt;br /&gt;&lt;br /&gt;Verilerimizi işleyen komutlar SELECT,INSERT,UPDATE ve DELETE'tir.Bunlara aynı zamanda DML komutları da denir.&lt;br /&gt;&lt;br /&gt;Select, istediğimiz tablodan kendi belirlediğimiz kriterlere göre kayıtları önümüze serer.Tabloda hangi alanları görüntülemek istiyorsak alan isimlerinin arasına virgül koymamız yeterlidir.Örnek vereyim:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SELECT isim,soyisim FROM ogrenci;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Beni bu kesmez,tablonun hepsini görmem lazım diyorsanız * karekterini çok seven birisi olmalısınız :) Niye mi,örneği inceleyin ;)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SELECT * FROM ogrenci;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Ama çoğu zaman böyle bütün bilgilerin çarşaf gibi gelmesini istemeyiz.Çünkü zaman kısa ve kısa zamanda en uygun bilgiye ulaşmamız gerçeği ile karşı karşıyayız ;) Tamam, merak etmeyin bunun da yolu var... Anahtar kelime ise &lt;b&gt;WHERE &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Diyelim ki, John Fred adlı müşterim faturasını ödediği konusunda beni ikna etmeye çalışıyor.Sonuçta bende John'un çetelesini tutan birisi değilim,ama sonuçta bu tezi çürütmek için antitez sunmak gerekiyor.İşte bu noktada veritabanım ve SQL yardımıma koşuyor.Diyorum ki:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SELECT * FROM SuleymanHolding where isim="John" and soyisim="Fred";&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Yukarıdaki kurtarıcı meleğim sayesinde John'a dersini vermiş oluyorum böylece.Nasıl yöntem ama :P&lt;br /&gt;&lt;br /&gt;Aslında WHERE i biraz daha tanıyalım diyorum ben,çünkü kendisine haksızlık olacak:&lt;br /&gt;&lt;br /&gt;Where, genelde grup çalışmasını seven bir arkadaşımızdır.Sizi birlikte çalıştığı operatörlerle tanıştırayım isterseniz:&lt;br /&gt;&lt;br /&gt;&lt;&gt; Büyük&lt;br /&gt;&gt;= Büyük veya eşit&lt;br /&gt;&lt;= Küçük veya eşit !&lt;&gt; Büyük değil&lt;br /&gt;= Eşit&lt;br /&gt;&lt;&gt; veya != veya # Eşit değil&lt;br /&gt;&lt;br /&gt;Onlar da sizinle tanıştıklarına memnun olmuşlar :)&lt;br /&gt;&lt;br /&gt;Az daha unutuyordum, AND, OR ve NOT ile de araları çok iyi.Birden fazla sorgu olduğunda bir araya geliyorlar.Yoksa birbirlerini aradıkları sordukları yok bana kalırsa.&lt;br /&gt;&lt;b&gt;SELECT * FROM ogrenci where cinsiyet="K" AND sinif=6 OR ogrencisayisi &lt;60;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;SQL, düzenli ve tertipli insanları düşünerek kendisine DESC ve ASC gibi iki önemli komutu eklemiştir. Bunlar da nedir diyebilirsiniz,biraz sabredin bende tam onu açıklayacaktım.DESC,verilerin azalan sırada,ASC ile verilerin artan sırada listelenmesini sağlar.Hem de istersen istediğimiz kriterlere göre bile verilerimizi artarak ya da azaltarak listeletebiliyoruz.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SELECT * FROM ogrenci ORDER BY tarih DESC;&lt;/b&gt;&lt;br /&gt;(Tarih kriterine göre azalan bir sırada listeleyecektir.)&lt;br /&gt;&lt;br /&gt;ASC, örneğini de siz düşünün,her şeyi devletten beklemeyin canım :P&lt;br /&gt;&lt;br /&gt;Biliyorsunuz ki veritabanı içindeki tablolar ve alanlar birbiriyle çok sıkı fıkı olabiliyor.Bu nedenle bazı veriler birden fazla yerde geçebiliyor, ki bu da select arkadaşımızdan bazı alanları listelemesini rica ettiğimizde o bilginin birden fazla listelenmesine sebep oluyor.SQL, buna da çözüm bulmuş.Dedi ki, eğer bunu önlemek istiyorsan DISTICT komutu kullan:&lt;br /&gt;&lt;b&gt;SELECT DISTICT bolum FROM ogrenci where ogrenciid&gt;20 ;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Tamam her şey hoş güzel de bana, 20 ile 30 arasındaki ogrenciler lazim,20 den büyük deyince 20 sonraki bütün öğrenciler listeleniyor.Ne anladım ben bu işten diyorsunuz değil mi :) SQL de çözümler biter mi hiç, sizi bugün bir de BETWEEN kardeşimizle tanıştırayım.Mesleği mi nedir? Tam sizin istediğiniz şeyi yapan işte bu eleman.Örneğin:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SELECT * FROM ogrenci where ogretmenmaas BETWEEN 600000 AND 900000;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Ama kriteriniz bir tarih ise şunu kullanmanızı öneriyorum,ama tercih sizin :P&lt;br /&gt;&lt;b&gt;SELECT * FROM ogrenci WHERE derstarihi BETWEEN {2100-06-01} AND {2999-02-03};&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Hayatınızda bir günde bu kadar kişiyle tanıştığınız mı bilmiyorum ama son olarak sizi AVG,SUM,MIN,MAX ve COUNT isimli arkadaşlarla tanıştırmak istiyorum."Kendini lafla değil,işle ve eserle anlat" demiş ya bir düşünür,isterseniz bende bu arkadaşları size işle anlatayım :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SELECT MIN(ogrenciid) FROM ogrenci WHERE sinif=6;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;* 6. sınıftaki ogrenciid si en büyük olanı getirir.&lt;br /&gt;&lt;b&gt;SELECT MAX(ogrenciid) FROM ogrenci WHERE sinif=7;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;*Evet mikrofon sizde ;)&lt;br /&gt;&lt;b&gt;SELECT SUM(ogrencisayisi) FROM ogrenci where bolum="sayisal";&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;* Sayısal bölümdeki bütün öğrencilerin toplam sayısını getirir.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SELECT AVG(yas) FROM ogrenci WHERE bolum="esitagirlik";&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;*Eşit ağırlıktaki öğrencilerin yaş ortalamasını getirecektir.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SELECT COUNT(*) FROM ogrenci;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;*ogrenci tablosundaki kayıt sayısını görüntüler.&lt;br /&gt;&lt;br /&gt;Şimdilik bu kadar, SQL yeter sanırım,sonra devam ederiz.Biraz da PL/SQL nedir,ne işe yarar ,ne eder ne yapar onu bir inceleyelim diyorum ben.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PL/SQL&lt;/b&gt; , SQL'in bir üst kümesi olmak üzere yordamsal olarak geliştirilmiş bir dildir.Özellikle bir defada çok fazla işlem yapmamız gerekiyorsa tek veritabanı bağlantısıyla işi bitirmemizi ve de veritabanı olaylarının tetiklenmesinde işimize oldukça yarar.&lt;br /&gt;&lt;br /&gt;PL/SQL, tanımlanan bloglar ile veritabanının kapısını çalar.Yoksa veritabanı ile bir türlü anlaşamaz,çünkü veritabanı ondan düzenli,net tanımlı,kendinin anladığı bir dilden konuşmasını ister.PL/SQL 'de Anonymous,Procedure ve Function olmak üzere 3 blok türünde veritabanı ile sohbeti oldukça ilerletmiştir :)&lt;br /&gt;&lt;br /&gt;Örnek vermek gerekirse:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Anonymous&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;[DECLARE]&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;--Deyimler&lt;br /&gt;[EXCEPTION]&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Procedure&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;PROCEDURE name&lt;br /&gt;IS&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;--Deyimler&lt;br /&gt;[EXCEPTION]&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;Function&lt;br /&gt;&lt;br /&gt;FUNCTION name&lt;br /&gt;RETURN datatype&lt;br /&gt;IS&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;--Deyimler&lt;br /&gt;RETURN value;&lt;br /&gt;[EXCEPTION]&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;span style=";font-family:&amp;quot;;font-size:12;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Değişkenler bizim istediklerimizi yapan ve bizden iş isteyen sadık elemanlarımızdır.Ancak  bazı şartları varmış,sizinle bu şartların en önemlilerini sizinle paylaşayım.Diyorlar ki:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;*Beni tanımlarken bir harfle başlamalısın.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;*Declerative  kesiminde tanımlamalısın.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;İsterseniz artık yavaş yavaş ilk PL/SQL bloğumuzu yazmaya başlayalım:&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;b&gt;SET SERVEROUTPUT ON&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;--Açıklama Satırı&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;b&gt;DECLARE&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;tk_ISIM VARCHAR(20);&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;b&gt;BEGIN&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;b&gt;select ISIM into tk_ISIM from OKUL where OKUL_SN=5;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;DBMS_OUTPUT.PUT_LINE(‘5  nolu okulun adı:’ || tk_ISIM); &lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;END;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Değişkenlerle çok sık haşir neşir olacağımız için bu elemanların özelliklerinden biraz daha bahsetmek istiyorum:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;*Kendilerinin  anlamlı adlarla çağırılmalarından çok hoşlanırlar.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;*NOT NULL  kısıtlaması varsa mutlaka ilk değerin atanmasını isterler.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;*CONSTANT tanımlanıp da ilk değeri  atamazsanız sizi yarı yolda bırakır.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;*Siz siz olun,kolon adlarını değişken adı olarak kullanmayın ;)&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;%TYPE Kullanımı&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;   %TYPE , ikide bir karşıma çıkıyor,bu da neyin nesidir diyebilirsiniz.Çünkü ben ilk gördüğümde öyle demiştim &lt;span style="font-family:Wingdings;"&gt;J&lt;/span&gt;  Meğer ki, tanımladığımız değişken türünü mevcut veritabanındaki tablodan üretilmesini sağlıyormuş.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Kullanımı :   &lt;b&gt;değişken   tabloadı.kolonadı%TYPE;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;emp_lname employees.last_name%TYPE;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;min_balance balance%TYPE=1000;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;%TYPE i daha kalıcı olarak anlayabilmemiz için bir örnek üzerinde görelim isterseniz:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;/* Bugünün ve yarının tarihini ekrana yazdırır.*/&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;SET SERVEROUTPUT ON&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;DECLARE&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;bugun DATE:=SYSDATE;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;yarin today%TYPE; /* Burda birinci değişkenden  %TYPE ile faydalandık. */&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;BEGIN&lt;/b&gt;&lt;br /&gt;yarin:=bugun+1;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;DBMS_OUTPUT.PUT_LINE(‘Hello World’);&lt;/p&gt;  &lt;p class="MsoNormal"&gt;DBMS_OUTPUT.PUT_LINE(‘Bugun:’ || bugun);&lt;/p&gt;  &lt;p class="MsoNormal"&gt;DBMS_OUTPUT.PUT_LINE(‘Yarın:’ || yarin );&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;END;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;    PL/SQL ‘i biraz daha yakından incelediğimde IF,WHILE,FOR gibi döngülere sahip olarak kendisinde güçlü bir yetenek katmış olduğunu gördüm.Tabi durur muyum,hemen bu yetenekleri nasıl kullanabilirim üzerinde araştırma yapmaya başladım…&lt;/p&gt;  &lt;p class="MsoNormal"&gt;      İsterseniz biraz örneklere göz atalım:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;IF KULLANIMI&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;b&gt;DECLARE &lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;not  number:=31;  /* İlk değer vermemiz önemlidir.Aksi takdirde ELSE kesimi  işleyecektir.*/&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;b&gt;BEGIN&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;    IF not &lt;11&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;    THEN&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;        DBMS_OUTPUT.PUT_LINE(‘Tembel bir ogrenciyim..’);&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;   ELSEIF not&lt;71&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;      THEN &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;         DBMS_OUTPUT_LINE(‘Orta duzey bir ogrenciyim’);&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;ELSEIF not&lt;86&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;    THEN&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;     DBMS_OUTPUT_LINE(‘Basarili bir ogrenciyim…’);&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;ELSE&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;    DBMS_OUTPUT_LINE(‘Henuz bilmiyorum,kendimi ariyorum :P’);&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;b&gt;END  IF;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;b&gt;END;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;&lt;b&gt;WHILE KULLANIMI:&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:12;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;DECLARE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;ulkeid mevki.ulke_id%TYPE := ‘CA’;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;mev_id mevki.mevki_id%TYPE;&lt;br /&gt;yeni_sehir mevki.sehir%TYPE := ‘İzmir’;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;sayac SAYI :=1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;SELECT MAX(mevki_id) INTO mev_id FROM mevki&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;WHERE ulke_id=ulkeid;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;WHILE sayac &lt;= 3 LOOP&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;   &lt;/span&gt;INSERT INTO mevki(mevki_id,sehir,ulke_id) VALUES(mevki_id+sayac),yeni_sehir,ulkeid);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;counter := counter+1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;END LOOP;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;END;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;FOR KULLANIMI:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;DECLARE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Ulkeid mevki.ulke_id%TYPE :=’CA’;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;mev_id mevki.mevki_id%TYPE;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;yeni_sehir mevki.sehir%TYPE := ‘Hakkari’;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;&lt;span style=""&gt; &lt;/span&gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;SELECT MAX(mevki_id) INTO mev_id&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;  &lt;/span&gt;FROM mevki&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;WHERE ulke_id=ulkeid;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;FOR&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt; i IN 1..3 LOOP&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;   &lt;/span&gt;INSERT INTO mevki(mevki_id,sehir,ulke_id) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;VALUES((mev_id+i),yeni_sehir,ulkeid);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;END LOOP; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;END;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;br /&gt;&lt;br /&gt;Hep var olan tablolar üzerinden işlem yapıyoruz, hiç kullanıcıdan bilgi istemeyecek miyiz diye aklınıza soru gelebilir. Evet kesinlikle çok haklısınız. Onun için de ‘&amp;amp;’ i kullanıyoruz.&lt;br /&gt;&lt;br /&gt;Örneğin;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;UNDEFINE ISIM&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;SET SERVEROUTPUT ON&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;SET VERIFY ON&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;DBMS_OUTPUT.PUT_LINE(‘Adınız: &amp;amp;&amp;amp;ISIM’);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;     &lt;/span&gt;DBMS_OUTOUT.PUT_LINE(‘Adınız:’ || UPPER(‘&amp;amp;ISIM’));&lt;br /&gt;&lt;b style=""&gt;END;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Sıra geldi, bileşik veri türlerine… Bu arkadaşları iki temelde inceleyebiliriz:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;1-Satır temelli bileşik veri (PL/SQL Records) : Programlamadaki struct a benzetebiliriz.Tablonun bir satırının işlenmesi amaçlı değişkene aktarılması gerektiği durumlarda kullanılır.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Örneğin;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;TYPE&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt; pers_record_type IS &lt;b style=""&gt;RECORD&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;   &lt;/span&gt;(soyadi VARCHAR(25),&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;     &lt;/span&gt;is_id&lt;span style=""&gt;   &lt;/span&gt;VARCHAR(10),&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;maas&lt;span style=""&gt;   &lt;/span&gt;NUMBER(8,2) );&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;   &lt;/span&gt;pers_record&lt;span style=""&gt;     &lt;/span&gt;pers_record_type;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;…&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;   &lt;/span&gt;pers_record.soyadi :=’Yıldırım’;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;%TYPE’ nin akrabası olan %ROWTYPE ile tanışmaya geldi sıra… %ROWTYPE, bir tablonun satır yapısının aynısında PL/SQL Record değişkeni oluşturulmasını sağlar.Bu yapı derleme zamanı oluşturulur.Yani tablonun değişmesi durumunda kodun yeniden derlenmesi tavsiye edilir.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;   &lt;/span&gt;Örneğin;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;DEFINE&lt;/span&gt; personel_no = 124&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;DECLARE&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;  &lt;/span&gt;pers_rec&lt;span style=""&gt;       &lt;/span&gt;emekli_personel%ROWTYPE;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;BEGIN &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;  &lt;/span&gt;SELECT personel_id,soyisim,is_id,yonetici_id,kira_tarihi,maas,komisyon,departman_id&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;INTO&lt;span style=""&gt;  &lt;/span&gt;pers_rec FROM personel&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;WHERE personel_id = &amp;amp;personel_no;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;INSERT INTO emekli_personel VALUES pers_rec;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;END;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;SELECT * FROM emekli_personel;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;2-Birden çok veri saklayan bileşik veri (Index By Tables): Bu yapıyı iki kolonlu bir tablo gibi düşünebiliriz.Birinci kolon primary key gibi çalışırken,ikinci kolon değerleri saklamak için kullanılır.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Örneğin;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;&lt;span style=""&gt;  &lt;/span&gt;DECLARE &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;TYPE&lt;span style=""&gt;   &lt;/span&gt;isim_tablo_tipi &lt;span style=""&gt;  &lt;/span&gt;IS TABLE OF&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;               &lt;/span&gt;personel.soyisim%TYPE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;&lt;span style=""&gt;              &lt;/span&gt;INDEX BY&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt; PLS_INTEGER;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;     &lt;/span&gt;TYPE kiratarihi_tablo_tipi IS TABLE OF&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;              &lt;/span&gt;DATE &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;&lt;span style=""&gt;              &lt;/span&gt;INDEX BY&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt; PLS_INTEGER;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;tablo_ismi&lt;span style=""&gt;      &lt;/span&gt;isim_tablo_tipi;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;kiratarihi_tablo&lt;span style=""&gt;    &lt;/span&gt;kiratarihi_tablo_tipi;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;tablo_ismi(1) :=’ MODA’;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;kiratarihi_tablo(2) := SYSDATE + 7;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;     &lt;/span&gt;IF tablo_ismi.EXISTS(1) THEN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;      &lt;/span&gt;INSERT INTO ….&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;….&lt;br /&gt;&lt;b style=""&gt;END;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;PL/SQL Record u farklı kullanım alanlarına bir göz atalım isterseniz:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;Nested Table : &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Index By yapısı gibi dizelere benzer.Ayrıldıkları noktalar:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;-Dizini negatif değerler almaz.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;-Dizin değeri sıralıdır.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;-Veritabanında VARCHAR2 gibi saklanabilir.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Örneğin;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;SET SERVEROUTPUT ON&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;DECLARE &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;  &lt;/span&gt;TYPE location_type IS TABLE OF locations.city%TYPE;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Offices location_type;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Table_count NUMBER;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Offices := location_type(‘Şırnak’,’Ağrı’,’İzmir’,’Ankara’);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;table_count := offices.count();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;br /&gt;FOR i in 1..table_count LOOP&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;   &lt;/span&gt;DBMS_OUTPUT.PUT_LINE(offices(i));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;END LOOP;&lt;br /&gt;&lt;b style=""&gt;END;&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;Varray:&lt;span style=""&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;PL/SQL’in farklı kullanımlarından bir tanesi de Varray’dir.En önemli özelliği dizi boyunun sabit olması ve dizi boyunun tanımlanırken belirlenmiş olmasıdır.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Belki daha bitmedi mi kardeşim,roman mı yazıyorsun diyebilirsiniz ama az kaldı biraz daha sabredin &lt;/span&gt;&lt;span style="line-height: 115%;font-family:Wingdings;font-size:100%;"  &gt;&lt;span style=""&gt;J&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;Explicit Cursor (Belirtilmiş İmleç): &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Bu garip şey de nedir diyor insan ilk gördüğünde değil mi? Şu işe yarıyormuş:&lt;span style=""&gt;  &lt;/span&gt;Diyelim ki bir sorguyu çalıştırdık ve önümüze satırlar çıktı,bu çıkan satırlar geçici bir alanda saklanıyorlarmış.İşte explicit cursor tam bu noktada sahneye çıkarak o saklanan alanlardaki satırları çağırmamızı sağlıyorlarmış.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Örneğin;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;SET SERVEROUTPUT ON&lt;br /&gt;DECLARE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;CURSOR emp_cursor IS&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;SELECT employee_id,last_name FROM employees&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;WHERE departman_id=30;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;  &lt;/span&gt;Empno employees.employee_id%TYPE;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Lname employees.last_name%TYPE;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;OPEN emp_cursor;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;LOOP&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt; &lt;/span&gt;FETCH emp_cursor INTO empno,lname;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;EXIT WHEN emp cursor%NOTFOUND;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;DBMS_OUTPUT.PUT_LINE( empno || ‘’ || lname );&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;END LOOP;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;CLOSE emp_cursor;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;END;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt; &lt;/span&gt;&lt;b style=""&gt;SQL Cursor:&lt;/b&gt; Bazı zamanlarda kullanıcı tarafından açıkça cursor istenmemiş olabilir.Bu durumlarda Oracle sorgu sonucunda ilerleyebilmek adına kapalı bir SQL cursor kullanır.Bazı SQL Cursorlarından örnek vermek gerekirse: SQL%FOUND , SQL%NOTFOUND, SQL%ROWCOUNT diyebiliriz.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Örneğin:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;VARIABLE&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt; rows_deleted VARCHAR2(30)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;DECLARE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;  &lt;/span&gt;Empno employees.employee_id%TYPE := 176;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;  &lt;/span&gt;DELETE&lt;span style=""&gt;  &lt;/span&gt;FROM employees&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;   &lt;/span&gt;WHERE employee_id=empno;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;   &lt;/span&gt;:rows_deleted := (SQL%ROWCOUNT || ‘row deleted. ’);&lt;br /&gt;&lt;b style=""&gt;END;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;Stored Procedures &amp;amp; Functions : &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;İlk başta blokları 3 e ayırmıştık.İsterseniz biraz da kısaca bu kalan bu iki blok hakkında biraz konuşalım.Daha iyi anlaşılması için anaonymous bloklarla stored Procedures &amp;amp; Functionları karşılaştıralım diyorum ben:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Anonymous Bloklar ; İsimsizdirler.Her çalışmada derlenirler.Veritabanında saklanmazlar.Başka bir uygulamaca çağrılmazlar.Değer döndürmezler.Parametre alamazlar.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Stored Procedures &amp;amp; Functionlar ise tam bunların tersini yapabildikleri için doğru yerde ve doğru zamanda kullanıldığında inanılmaz işimize yararlar.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Örneğin;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;CREATE OR REPLACE FUNCTION check_ss1(empno employees.emplooyee_id%TYPE)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;RETURN Boolean IS&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;dept_id employees.departman_id%TYPE;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;sal&lt;span style=""&gt;  &lt;/span&gt;employees.salary%TYPE;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;avg_sal employees.salary%TYPE;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;SELECT salary,department_id INTO sal,dept_id FROM employees WHERE employee_id=empno;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;SELECT avg(salary) INTO avg_sal FROM employees WHERE departmen_id=dept_id;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;ID sal &gt; avg_sal THEN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;   &lt;/span&gt;RETURN TRUE;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;ELSE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt; &lt;/span&gt;RETURN FALSE;&lt;br /&gt;END IF;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;EXCEPTION&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;    &lt;/span&gt;WHEN NO_DATA_FOUND THEN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;       &lt;/span&gt;RETURN NULL;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;END; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;İşlev Çağırma:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;DBMS_OUTPUT.PUT_LINE(‘Checking for employee with id 205’)&lt;b style=""&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;IF(check_sal(205) IS NULL ) THEN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;     &lt;/span&gt;DBMS_OUTPUT.PUT_LINE(‘Returned NULL due to exception’);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;ELSEIF(check_sal(205)) THEN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;   &lt;/span&gt;DBMS_OUTPUT.PUT_LINE(‘Salary &gt;average’);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;ELSE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;  &lt;/span&gt;DBMS_OUTPUT.PUT_LINE(‘Salary &lt;average’);&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/average’);&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;END IF;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;b style=""&gt;&lt;br /&gt;END;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Amacımız PL/SQL’e kısa bir giriş yapmak olduğu için Trigger’lara da değinip bu yazımı sonlandırmak istiyorum:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;Tetikleyici (Trigger) : &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Tetikleyiciler,olaylar yoluyla çalışırlar.Bir olaydan hemen sonra ya da hemen sonra çalışacak şekilde ayarlanabilirler.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;Örneğin;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;CREATE OR REPLACE&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt; trigger “t_SEQ_SEKTOR_PK” before insert &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;on “SEKTOR” for each row&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;   &lt;/span&gt;SELECT “SEQ_SEKTOR_PK”.nextval&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;&lt;span style=""&gt;       &lt;/span&gt;INTO : new.”SEKTOR_PK” FROM dual,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;b style=""&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;" &gt;END;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;Sözlerime burada son verirken son olarak oracle de java kullanımından birazcık bahsetmek istiyorum:&lt;br /&gt;&lt;br /&gt;Oracle prosedürleri içerisinde bildiğiniz gibi Java kodu kullanmak mümkündür.Oracle, kendi içerisinde gömülü bir JVM içerir ve bu sayede istediğimiz Java kodunu Oracle veritabanı üzerinde tanımlayabilir ve çalıştırabiliriz.&lt;br /&gt;&lt;br /&gt;Diyelim ki aşağıdaki gibi bir java kodumuz olsun:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;create or replace and compile java source named runcommandjava as&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;import java.io.*;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;import java.util.*;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;public class RunCommandJava{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;public static void run(String cmdText)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;throws IOException, InterruptedException&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;int rtn;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Runtime rt = Runtime.getRuntime();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Process prcs = rt.exec(cmdText);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;rtn = prcs.waitFor();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bu java kodunu çalıştıracak Java prosedürünü şu şekilde yazabiliriz:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CREATE OR REPLACE PROCEDURE RUNOSCOMMAND&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(param IN VARCHAR2) AS LANGUAGE JAVA&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NAME 'RunCommandJava.run(java.lang.String)';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Çalıştırmak için de tek yapmamız gereken: &lt;span style="font-weight: bold;"&gt; exec runoscommand('echo deneme');&lt;/span&gt; demektir.&lt;br /&gt;&lt;br /&gt;Umarım faydalı bir yazı olmuştur.Lütfen varsa  eksiklikleri ve düzeltmeleri paylaşınız.&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:12;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3505418659957917685-9220177241619718337?l=turkcellstaj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://turkcellstaj.blogspot.com/feeds/9220177241619718337/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3505418659957917685&amp;postID=9220177241619718337' title='2 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/9220177241619718337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/9220177241619718337'/><link rel='alternate' type='text/html' href='http://turkcellstaj.blogspot.com/2008/07/sql-plsql-and-java.html' title='SQL, PL/SQL, and Java'/><author><name>Süleyman Diker</name><uri>http://www.blogger.com/profile/01201506146614815559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3505418659957917685.post-92737642063839013</id><published>2008-07-21T02:24:00.000-07:00</published><updated>2008-07-28T03:40:44.708-07:00</updated><title type='text'>Data Concurtency ve Consistency</title><content type='html'>Merhabalar arkadaşlar geçte olsa benim gibi tembel adamlara rağmen bir staj bloğuna başlanmış.Bu konuda öncü olanlara ve desteğini bizden esirgemeyen GURU Tonguç abimize çok teşekkür ederim.Siz gibi değerli arkaşalarımızın arasında bana düşmez bir şeyler yazmak ama karşımda sürekli çalışan Süleyman arkadaşımızı görünce onun bu azmi karşısında yazmaktan yorgun düşmüş klavyemin ucunda biriken nağmeler yeniden hortlayarak interruptlarını göndermeye başladı.:)&lt;br /&gt;Tarih 20 Temmuz 2008 eğitimin tarihi ise 12 Temmuz 2008 .Nerdeyse eğitmenimiz Övünç Bozcan abiyi unutacağım.Daha yeni yazıyorum.Eğitmeni unutan eğitimide unutmuş olabilir bundan dolayı yanlış veya eksik yazılarım için şimdiden özür dilerim,düzeltme ve eklemeleriniz içinse sizden rica ederim.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;DATA CONCURRENCY VE CONSISTENCY&lt;/span&gt;&lt;br /&gt; Tek kullanıcılı databselerde kullanıcı istediği gibi verileri değiştirip okuyabilir.Fakat çok kullanıcılı databselerde birden fazla kullanıcı ayna anda aynı data üzerinde değişiklik yapmak isteyebilir.İşte o zamanda transactionın tutarlı ve anlamlı sonuçlar üretmesi gerekir.Bundan dolayı databasein concurrency ve consistent olması hayati önem taşırmış.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Concurency:&lt;/span&gt; Birçok kullanıcının aynı anda aynı kaynağa-dataya ulaşabilmesi demektir.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Consistency:&lt;/span&gt;Diğer kullanıcılar kendi transactionlarını gerçekleştirirken her kullanıcı verinin kararlı halini görmesidir.&lt;br /&gt;&lt;br /&gt;Transactionlar aynı anda çalışırken veri tabanının consistent nasıl davranacağını karar vermek için araştırmacılar serializability adında transaction isolation model tanımlamışlar. Bu modda transactionlar birkaç yolla çalışırlarken concurently şekilde davranırlar.Transactionlar arasında isolationın bu derecesi genellikle birçok uygulama çalışırken aynı çıktıları üretmeleri arzu edilir.Concurrency locklardan etkilenir fakat bunlardan çok daha fazla bişeydir.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Transaction Isolation Level&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dirty reads:Commit edilmemiş datalar arası işlem yaparken başkasının gelip eski bilgiyi okuması demektir.Oracle da okuyucular datayı değiştirmiş olsalar bile diğer kullanıcı undo blocklardan değişmiş datayı okuyacağından dirty read yoktur.Aşağıdaki gibi sorunu çözer.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_alCp7PVnTps/SIRXltsv5YI/AAAAAAAAAB8/ykL7ykRhWa8/s1600-h/untitled.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_alCp7PVnTps/SIRXltsv5YI/AAAAAAAAAB8/ykL7ykRhWa8/s320/untitled.bmp" alt="" id="BLOGGER_PHOTO_ID_5225397773090678146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Non-Repeatable read:Bir kullanıcı bilgiyi okuyor geçiyor.Hemen ardından başka bir kullanıcı bilgiyi değiştirip commit ediyor.İlk kullanıcı yeniden veriyi okuduğunda ilk veriyle bir tutarsızlık oluyor.Buna deniyor.&lt;br /&gt;&lt;br /&gt;Phantom Read:Burayı kaçırmışım galiba ama okuduğum kadarıyla yine bir kullanıcı gelip select yapıyor almak istediğini alıyor.İkinci bir kullanıcı geliyor adamın bu select yaptığı yere insert yapıyor.sonra ilk kullanıcı yeniden select çalıştırdığında aynı veriler elde edilmiyor.Bir üstekine çok benziyor anladığım kadarıyla bundaki tek fark insert edilmesiymiş.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; Oracle Isolation Levels&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Read Commited:Default olan transaction isolation leveldir.Oracleda her bir sorgu başladığında o ana kadar commit edilmiş bilgileri görür.Boylelikle dirty read olayını da önlemiş olur.&lt;br /&gt;&lt;br /&gt; Serializable:Bunda transaction başlamasına kadar olan değişikliklere artı olarakkendi içinde yaptığı INSERT,UPDATE ve DELETE statementlarınada izin verir.&lt;br /&gt;Read-Only:Bu sadece transaction başladığındaki bilgileri görür ve işlem yapar üsteki gibi INSERT,UPDATE ve DELETE statementlarınada izin vermez.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Flashback Concept&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Flashback query geçmişte kalan bir bilgiyi elde etmemizi sağlayan birşeydir.Bun sorguyu zaman veya SCN bazında yapabiirsiniz. Bunu yaparkende undolardan yararlanır.Oracle undo retention period adında bir değişken tutar.Bu flashback yapılabilecek noktayı gösterir.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;LOCK&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Locklar aynı kaynağa ulaşmaya çalışan transactionların concurrency olmasını sağlayan mekanizmadır.Sql statement çalıştırıldığında ORACLE otomatik olarak lock mekanizmasını size sağlar.Oracle yüksek veri tutarlılığı için gerekli olan en düşük lock mekanizmasını kullanır.&lt;br /&gt;&lt;br /&gt; Lock yapısı databaseler arası farklılık gösteren ve databaseleri bildiğimiz dosya sisteminden ayıran bir yapıdır.Bu yapıyı databaseler çok farklı şekilde kullandıklarından databaseler arası farklılığı bunlar oluşturur denilebilir.&lt;br /&gt;Oracle okuma yaparken kilit kullanmaz ve kayıtları satır bazında kilitler.Siz bir row üzerinde değişiklik yapıyorsanız sadece o satır kilitlenir.Diğer satırlar bundan etkilenmez.&lt;br /&gt;&lt;br /&gt; Databaselerde Lost update denen bir olay var.2 kullanıcı bir veri üzerinde değişiklik yapacak birinci kullanıcı yapıyor commit ediyor ikinci kullanıcı bunu görmeden oda değişiklik yapıp commit etmeye çalışıyor.Fakat yaptığı değişiklik olmayabilir çünkü birinci kullanıcı önceden veriyi değiştirmiştir.Bu durumun kontrol altına alınması gerekir.Bu MsSql de de disconnected layerde var.Bu durumu Oracle 2 şekilde ele alır:&lt;br /&gt;&lt;br /&gt; Pessimistic Locking:Oracle’da “SELECT FOR UPDATE ” ile select statement çalıştırıldığı zaman kilit oluşturulur.Birinci kullanıcı raw a eriştiği an kilit oluşturulur,ikinci kullanıcının erişmesi engellenir.Tabi bu durum concurrency’i düşürür.Buda malumunuz istenen bir durum değildir.&lt;br /&gt;&lt;br /&gt; Optimistic Locking:Burda durum hakkaten iyimserdir.Select yaptığınızda kilite gerek yoktur.Fakat update kısmında durum kontrol edilir.Oracle default olarak bunu kullanılır ve çeşitli şekillerde implemente eder.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lock Tipleri&lt;/span&gt;&lt;br /&gt;Oracle dataya farklı erişimlerin tutarlılığını sağlamak ve userlar arasındaki o birbirini yıkıcı durumları ortadan kaldırmak için otomatik olarak çeşitli lock mekanizmaları kullanırlar.Bu locklar 3 kategori altında incelenir.&lt;br /&gt;&lt;br /&gt; DML locks (veri lockları) :DML lockları veriyi korurlar.Mesela tablo lockları tablonun hepsini,satır lockları ise seçilen satırı korurlar.&lt;br /&gt;&lt;br /&gt; DDL locks(dictionary lockları ) :Schema objectlerini korurlar.Mesela tablo tanımları gibi&lt;br /&gt;&lt;br /&gt; Internal locks and latches :Datafile gibi Internal olan veritabanı nesnelerini korurlar.&lt;br /&gt;&lt;br /&gt; Değerli eğitimcimizden 2 saatte kapabildiklerimi sizinle paylaşmaya çalıştım.Sizde değerli yorumlarınızla katkıda bulunursanız sevinirim.Uykusuz ve yazmak için yazılan bir moda yazıyorum.&lt;br /&gt;Bunu bile zor yazdım.Sabah sabah Anıl Hanımı görmeseydim ve o tılsımlı günaydını işitmeseydim bunuda yazamayacaktım aslında.Bir insan bu kadar ilham kaynağı olabilir.Kendisini o kadar çalışkan ki kendimdeki tembellik cevherini keşfettim.Yoğun olması sebebiyle fazla muhabbetimiz olmadı ama bir keresinde bana “Ah sizin gibi geçliğim eyvah” diyerek sezenişte bulunmuştu.Aslında hani o içimizdeki dinamizm olarak bakarsak ben onun en az 10 yaş üstü gibi görünüyorum. Neyse ben daha fazla geyik yapmadan desteklerinden dolayı Tonguç Abimize ve değerli Anıl Ablamıza teşekkür ederek herkese iyi çalışmalar dileyeyim…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3505418659957917685-92737642063839013?l=turkcellstaj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://turkcellstaj.blogspot.com/feeds/92737642063839013/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3505418659957917685&amp;postID=92737642063839013' title='1 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/92737642063839013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/92737642063839013'/><link rel='alternate' type='text/html' href='http://turkcellstaj.blogspot.com/2008/07/data-concurrency-ve-consistency.html' title='Data Concurtency ve Consistency'/><author><name>Bekir Sıtkı ERTUĞRUL</name><uri>http://www.blogger.com/profile/10771719516105860502</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_alCp7PVnTps/SIRXltsv5YI/AAAAAAAAAB8/ykL7ykRhWa8/s72-c/untitled.bmp' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3505418659957917685.post-1197078095302735087</id><published>2008-07-18T16:00:00.000-07:00</published><updated>2008-07-28T01:48:40.631-07:00</updated><title type='text'>Statement Processing and CBO Part1-Part 2</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;&lt;br /&gt;Merhaba arkadaşlar;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Bu yazıda sizlere &lt;span style="font-weight: bold;"&gt;Statement Processing and CBO&lt;/span&gt; hakkında bilgiler vermeye çalışacağım. Bu konuda çok iyi olduğum söylenemez&lt;span style="font-weight: bold;"&gt; :)&lt;/span&gt; Fakat yapmış olduğum bazı araştırmaları sizlerle paylaşmak istedim. Faydalı olmasını umarak başlayalım isterseniz.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Statement Processing deney olay esasında 4 temel kısımdan oluşur. Şimdi önce bu 4 temel olayın ne olduğunu söyleyeyim, daha sonra da bunların açıklamalarına geçeyim: Aslında önce isim sonra açıklama yapmak da olabilir; ama öncelikle ismleri belirtirsem daha yi olacağını düşündüğüm için böyle bir yöntem izledim. İsteyen arkadaşlar burayı atlayarak direkt isim açıklama bölümünden başlayabilirler. Tamam tamam farkındayım çok uzattım. Hadi başlayalım madem. &lt;span style="font-weight: bold;"&gt;:)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:times new roman;" &gt;4 Temel Kısım&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;- Parsing&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;- Opitimization&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;- Row-source generation&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;- Execution.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Yukarıda vermiş olduğum kısımları şimdi sıra ile inceleyelim isterseniz.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:times new roman;font-size:180%;"  &gt;1- Parsing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Şimdi Parsing denen olaya girmeden önce orada kullanacağım bazı kelimelerin anlamlarını sizlerle paylaşayım. Paylaşayım ki sonra bu neydi diye bana sormayın :) Aslına bakarsanız amacım anlatımın estetiğini korumak. Ondan en başta anlatıyorum. Yoksa zamanı geldiğinde de değinebilirdim. Neyse gelelim bu kelimlelere…&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:times new roman;" &gt;Shared pool check :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Kısaca Shared pool, SQL komutlarının memory de bulundukları yer olarak tanımlayabiliriz. Bu SQL cümlecikleri shared pool'un library cache denilen bölümünde hayatlarını sürdürür.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Biraz toparlayayım. Bildiğiniz ya da bilmediğiniz gibi Parse olayı biraz maliyetli bir iştir. Bizim de bu maliyeti olabildiğince aşağıya çekmemiz lazım. Bu amaç doğrultusunda bize hizmet eden şey. Shared pool oluyor. Şimdi bu adam bu kutsal hizmeti nasıl yapıyor bir de ona bakalım isterseniz. Parse edilen bir SQL komutu burada bir süre saklıyor. İlerleyen zamanda aynı komutu çalıştırmaya kalktığımızda bu komutun daha önce pars edildiğini fark ediyor ve tekrar pars edilmesinin önüne geçiyor. Ve bize ciddi kazançlar sağlıyor. Ya da bunun gibi bişey &lt;span style="font-weight: bold;"&gt;:)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Şimdi pars olayına geçelim. Pars olayı esasında şöyledir arkadaşlar :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;SQL de yazdığımız cümleciklerin Oracle'ın anlayacağı dile çevrilmesi olayıdır. Yani esasında Oracle bizim SQL de yazdıklarımızın ne demek olduğunu anlamıyor. Anlayabilmek için bir şekilde kendi diline çevrilmesi gerekiyor. İşte bu çevrilme olayının yapıldığı duruma Parsing deniyor. Şimdi bu olay nasıl gerçekleşiyor ona bi bakalım. Bunu maddeler halinde sıralayalım.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;      * Öncelikle cümle parçalara ayrılıyor.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;      * Sonra ne tip bir operasyon olduğu belirleniyor.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;      * Daha sonra gerçekten geçerli ve anlamlı bir komut olup olmadığı tespit ediliyor. (syntactic ve semantic analizi yapılıyor)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;      * SQL cümleciğnin anlamlı olduğuna karar verilince sıra shared pool check'e geliyor. (Ne demek olduğunu yukarda anlattım :) ) Burada SQL cümleciği hem text, hem de işlev olarak tamamen aynı olup olmadığına dair bir kontrol gerçekleşir. Eğer SQL cümlemiz bu kontrolü geçemezse Optimization ve row source generation kısımlarına uğraması kendisine anlayacağı bir dille beyan edilir. Bu kısımlar ne demek mi? Biraz sabırlıolursanız anlatacam :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:times new roman;font-size:180%;"  &gt;2- Optimization&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Burada da önce aşağıda kullanacağımız bir takım ifadeleri açıklamak istiyorum. Eee bu da benim tarzım.&lt;span style="font-weight: bold;"&gt; :) &lt;/span&gt;Herkesin yoğurt yiyişi farklı ne de olsa. &lt;span style="font-weight: bold;"&gt;:)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:times new roman;" &gt;Rule Based Optimizer(RBO):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Bu vatandaş biraz kuralcı takılıyor.&lt;span style="font-weight: bold;"&gt; :)&lt;/span&gt; Kurala dayalı bir optimizer yani. Bu vatandaşın başlangıçta bir takım kuralları var. Bu kurallar çerçevesinde execution plan'ı belirliyor. Yalnız bu vatandaşın kuralları çok katı olduğundan ve bunun sonucunda bir takımı sıkıntıları olduğundan dolayı Oracle artık bunu kullanmıyor. Sıkıntıları ne diye soracak olursanız şu şekilde belirteyim. İndex i görünce vatandaş dayanamıyor ve duruyor. Be kardeşim ne duruyon. Tamam index kullanmak genel olarak avantajlı; fakat Her zaman index kullanmak avantajlı değil, bazen table da full scan yapmak daha makbul diyor kullanıcı ama dinlemiyor. Bunun üzerine Kullanıcı kızıyor ve sen sana söylediğimi yapsana diyor ama nafile. Adam dinlemiyor. Bunun üzerine kullanıcı vatandaşı büyük patron Oracle’a şikayet ediyor. Oracle da “Sen benim kullanıcımın dediğini yapmazsan sana ne hacet.” diyerek resti çekiyor. Ve bizim vatandaş böylece işinden oluyor. :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-family:times new roman;"&gt;Hint:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Hint i zor kullanmak ve “ben ne diyorsam o.” Demek ile eş anlamlı olarak görebiliriz. Zaten öyle de. Diyelim ki Oracle da birşeyler yapmak istiyoruz; fakat bazı prosedürler buna izin vermiyor. Ama o olayı mutlaka yaptırmamız gerekiyorsa o zaman devreye bizim hint giriyor ve konuya müdahale ediyor. Oracle başta direnir gibi yapıyor ama bizim eleman “ Kardeşim konuşma da sana söyleneni yap. Biz ne yaptığımızı biliyoruz. Senden ne isteniyorsa onu yap.” diyor. Tabi emir demiri keser hesabı sonuçta istediğimizi oracle a kabul ettiriyoruz. :) Yani oracle güzellikten anlamadığı zaman bazen böyle şeyler olması iyi oluyor dimi arkadaşlar :) Fakat yine de olayları şiddet kullanmadan halletmemiz önerildiği için çok zor durumlarda kalmadığımız sürece bu yöntemi kullanmazsak iyi olur. Çünkü burada her şeyden sen sorumlu oluyorsun. Ama diyorsanız ki hint olmadan bu işten çıkamam. O zaman yapacak bir şey yok. Yalanın bile mübah olduğu durumlar var.:)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;&lt;strong&gt;Cost Based Optimizer(CBO):&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Bu eleman tamamen maliyete dayalı bir mantık ile hareket eder. Adamın çalışma mantığı şu şekilde:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Tablo üzerinde daha önce toplanmış bazı istatistiklerden yararlanarak, istenen sorgu için maliyet çıkarır ve içlerinden en az maliyete sahip olan execution plan'ı seçer. Burada bu olay tamamen tahmin den ibarettir. Öyle ki aynı sorguyu farklı zamanlarda çalıştırdığında bile farklı sonuçlar verebilir. Yani eleman anlık düşünüyor ve ana göre hareket ediyor. :) Her ne kadar tahmin üzerinden iş yapsa bile istatistikleri sürekli güncel olduğundan dolayı yanılma payı çok azdır. Hal böyle olunca sözüne büyük ölçüde güvenilebilir. Fakat çok az yanıldığı her zaman doğru sonuçlar vereceği anlamına gelmez. Bu durumda da sorgu içerisinde hint vererek “Kardeşim ben ne yaptığımı biliyorum sen ne diyorsam onu yap.” diyip dediğimizi yaptırtabiliriz. O da hay hay sen nasıl istersen der ve dediğimizi yapar. Yani RBO gibi asilik yapmaz. :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Bir de şöyle bir durum var. CBO süresi düşük olunca her zaman cevap süresi de kısa olacak diye bir kaide yok. Bazı durumlarda CBO süresi oldukça kısa olmasına rağmen cevap süresi oldukça uzun olabilir.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Şimdilik bu kadar açıklama yeter. Gelelim bizim optimizer dediğimiz elemanın ne iş yaptığına ve bunu nasıl yaptığına.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;&lt;strong&gt;Optimization&lt;/strong&gt;, bir SQL cümleciğinin nasıl çalışması gerektiğine karar veren elemandır. Sorgunun optimize edilmesini, en iyi şekilde nasıl çalışacağını belirleyen ve execution plan'ının oluşturulması olayıdır. Yukarda da değindiğim gibi şu anda sadece CBO kullanılıyor. RBO laf dinlemediği için artık Oracle ile çalışmıyor. :)&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt; &lt;/p&gt;&lt;span style="font-size:130%;"&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:times new roman;font-size:180%;"  &gt;3- Row source generation:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Execution Plan'ın Oracle'ın anlayacağı şekle çevrilmesi ve özel data structure'ına dönüştürülmesidir. Bu aşama artık son aşama olup sorgu sonucunun kullanıcıya ulaştığı aşamadır.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:times new roman;font-size:180%;"  &gt;&lt;strong&gt;4- Execution:&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Bütün bu işlemlerden sonra execution gelir. Execution kesinlikle var olan bir adımdır. Execution asla ve asla es geçilemez. Çalıştırılan SQL bir DDL ise veya veriyi güncelleyen bir SQL ise ( update, insert delete ) execution adımı operasyonun son adımıdır.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Query ise (select) bir sonraki adım fetch adımıdır. Burada parse edilen komutlar kullanıcıya döner.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=";font-family:times new roman;font-size:180%;"  &gt;GÜN İLE İLGİLİ ÖNEMLİ NOKTALAR&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;"Eveeet. Nihayet bitti." dediğinizi duyar gibiyim. Ama daha bitmedi. &lt;span style="font-weight: bold;"&gt;Tonguç abi &lt;/span&gt;nin söylediği bazı önemli noktaları yukarıda yazmadım. Onlar önemli ve özel oldukları için ayrıca yazmakta fayda olacağını düşündüm ve burada onları yazmaya karar verdim. Onlar da bittikten sonra daha da bir şey yok. &lt;span style="font-weight: bold;"&gt;:)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;* Pars için ayrılan süre olabildiğince kısa tutulması büyük uygulamalar için oldukça önemlidir.&lt;/span&gt; &lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;* Bir tablodan az miktarda bilgiyi kullacaksak tablonun tamamını çekmemek gerekir.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;* Az olan bilgiye ulaşmak için index kullanmak oldukça avantaj sağlarken tablonun tamamı için paralel kullanılmalıdır.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;* Bir SQL in nasıl çalışması gerektiğine karar veren yapı OPTIMIZER’dir.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;* Hint kullanmak çok fazla önerilmez. Fakat çok zor durumlarda kullanılması avantaj sağlayabilir.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;* Bir sistemde ne kadar az kaynak (disk, bellek, network…vs ) kullanılırsa cevap süresi bir o kadar daha kısalır.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;* Primary key indexlenen kolon bilgilerinin yanı sıra &lt;strong&gt;RowID&lt;/strong&gt; leri de tutar.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;*&lt;strong&gt; DDL(Data Definition Language) :&lt;/strong&gt; "Data Dictionary" üzerinde değişikliğe sebep olan create, drop, alter gibi işlemlerdir.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;* &lt;strong&gt;DML(Data Manipulation Language)&lt;/strong&gt; : Veriye ulaşmak ya da değiştirmek amacıyla yapılan işlemlerdir.(Select, update,delete &lt;/span&gt;&lt;span style="font-family:times new roman;"&gt;vs.)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;* “&lt;strong&gt;Selectivity&lt;/strong&gt;” ; bir satır kümesinin parçası anlamına gelir.Örneğin “all_objects” tablosunda “… where object_type = ‘TABLE’” koşulu için dönen satırlar “selectivity” kavramını karşılar. [0-1] arası değer alır.”0” ın anlamı satır kümesinden hiç satır dönmemesi, “1” de satır kümesindeki tüm satırların dönmesi olarak yorumlanır.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;* Oracle da en fazla iki tablo join edilebilir.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;* &lt;strong&gt;SGA&lt;/strong&gt;(system Global Area), içersinde veri barındıran bir grup paylaşımlı bellek yapısı(shared memory structure) ve Oracle veritabanı “instance”’ı hakkında kontrol bilgileri taşıyan bellek&lt;br /&gt;kısmıdır.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;&lt;br /&gt;Not: Arkadaşlar ben ilk yazımı yazarken iki günü tek yazı halinde yazdım. Bir de baktımki ayı bir part olarak yazılacakmış o. &lt;span style="font-weight: bold;"&gt; :) &lt;/span&gt;Buradan kesip ayrı bir yazıymış gibi yazmak yerine durumu izah edeyim dedim. Part 1 ve Part 2 burada sizlere sunulmuş durumda.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;font-family:times new roman;" &gt;GERÇEKTEN THE END  &lt;/span&gt;&lt;span style="font-weight: bold;font-family:times new roman;" &gt;:)&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3505418659957917685-1197078095302735087?l=turkcellstaj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://turkcellstaj.blogspot.com/feeds/1197078095302735087/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3505418659957917685&amp;postID=1197078095302735087' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/1197078095302735087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/1197078095302735087'/><link rel='alternate' type='text/html' href='http://turkcellstaj.blogspot.com/2008/07/statement-processing-and-cbo.html' title='Statement Processing and CBO Part1-Part 2'/><author><name>IsmailKOC</name><uri>http://www.blogger.com/profile/00942485432369179920</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3505418659957917685.post-977999246547625240</id><published>2008-07-18T06:50:00.000-07:00</published><updated>2008-07-21T01:32:22.138-07:00</updated><title type='text'>Oracle Utilities</title><content type='html'>Introduction to Oracle Utilities&lt;br /&gt;Oracle Utilities’e Giriş:&lt;br /&gt;&lt;br /&gt;Oracle's database utilities şunları sağlar:&lt;br /&gt;&lt;br /&gt;Data ve metadatanın Data Pump Export and Import kullanarak bir databaseden başka yere yüksek hızda taşınmasını sağlar.&lt;br /&gt;&lt;br /&gt;Extract and manipulate, database objeleri için metadatanın representation’larını Metadata API kullanarak tamamlar.&lt;br /&gt;&lt;br /&gt;Data ve metadatanın hepsini ya da bir kısmını Data Pump API kullanarak bir database’den diğerine taşır.&lt;br /&gt;&lt;br /&gt;SQL*Loader kullanarak operating system dosyalarından ya da external tablolarını kullanarak external sources’tan oracle tablolarına veri yükler.&lt;br /&gt;&lt;br /&gt;Redo log dosyalarını, LogMiner’lı SQL arayüzüne sorgular.&lt;br /&gt;&lt;br /&gt;DBDATAFY ile data-dosyasında ya da bir çevrimdışı (ör: backup) database’de fiziksel data yapısını bütünlük kontrollerini icra eder.&lt;br /&gt;&lt;br /&gt;DBNEWID yardımcı programını kullanarak, bir işlemsel database için database adı (DBNAME) ve dahili database tanıtıcısını (DBID) sağlar.&lt;br /&gt;&lt;br /&gt;Overview of Data Pump Export and Import&lt;br /&gt;Oracle Data Pump teknolojisi, databaseden başka bir database’e data ve metadataların çok hızlı taşınmasını etkinleştirir. Bu teknoloji, Oracle’ın data taşımasının temelidir (Data Pump Export and Data Pump Import).&lt;br /&gt;Data Pump, data ve metadataların alt kümesinin hareket edip etmemesi gerektiğini belirtmenizi sağlar.&lt;br /&gt;Bu, Export ve Import parametreleri boyunca uygulanan data filtreleri ve metadatalar filtreleri kullanılarak yapılır.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Data Pump Exp&lt;a name="sthref1792"&gt;&lt;/a&gt;ort&lt;br /&gt;Data Pump Export ‘dump file set’ denilen işletim sistem dosyalarının bir kesinine data ve metadatalerın unload olması için bir yardımcı programdır. ‘Dump file set’, Data Pump Import yardımcı programıyla başka bir sisteme taşınabilir ve tarafından yüklenebilir.&lt;br /&gt;Dump file kümesi; table data, database object metadata, and control information içeren bir ya da daha fazla disk dosyasının oluşumudur.&lt;br /&gt;Dosyalar sadece Data Pump Importla okunabilen binary formatta yazılır. Import işi sırasında Data Pump Import, bu dosyaları dump file içindeki her database nesnesini yerleştirmek için kullanır.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Data Pum&lt;a name="sthref1795"&gt;&lt;/a&gt;p Import&lt;br /&gt;Data Pump Import, export dump dosyalarının hedef sisteme yüklemeye yarayan programdır. The dump file; table data, database object metadata, and control information içeren bir veya daha fazla disk için hazırlanır. Dosyalar, binary formatta yazılır.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Overview of the Data Pump API&lt;br /&gt;Data Pump API'SI, başka bire bir databaseden bir site için data ve metadatalerin bir bölümünü ya da bütünü taşımak için bir çok hızlı bir mekanizma sağlar. Data Pump API'SIni kullanmak için, sen DBMS DATAPUMP PL-SQL paketinde sağlanmış procedure’ler kullanılır. Data Pump Export'si ve Data Pump Import işlemleri, Data Pump API'SInde bulunur.&lt;br /&gt;&lt;br /&gt;Overview of the Metadata API&lt;br /&gt;Meta dataler uygulama programlama arayüzü (API) şunları sağlar:&lt;br /&gt;&lt;br /&gt;Object's meta data tiplerine XML olarak erişilir.&lt;br /&gt;&lt;br /&gt;XML in çevrilmesinin çeşitli yolları vardır bunların bir tanesi de SQL in kullandığı DLL dosyalarıyla gerçekleşir.&lt;br /&gt;&lt;br /&gt;Meta datalar API'SIni kullanmak için, DBMS_METADATA PL/SQL paketinde sağlanmış procedureler kullanılır. Databasedeki her entitiy, Meta datalar API'SInin amaçları için, object type’ına ait olan object gibi şekillendirilir. Örneğin, scott.emp tablosu objecttir ve object type’ı TABLE'dır. Bir object'nin metadatalarını fetch edildiğinde, object type’ını belirtmelisiniz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3505418659957917685-977999246547625240?l=turkcellstaj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://turkcellstaj.blogspot.com/feeds/977999246547625240/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3505418659957917685&amp;postID=977999246547625240' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/977999246547625240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/977999246547625240'/><link rel='alternate' type='text/html' href='http://turkcellstaj.blogspot.com/2008/07/oracle-utilities.html' title='Oracle Utilities'/><author><name>Can Gunduz</name><uri>http://www.blogger.com/profile/06608776998001900075</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_BFdlnhTi6JI/SSUsVkPZARI/AAAAAAAAACY/jgttq_XjrHA/s1600-R/cangunduz-128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3505418659957917685.post-3360641737131367878</id><published>2008-07-17T01:28:00.000-07:00</published><updated>2008-07-28T03:41:24.674-07:00</updated><title type='text'>Introduction to Java Enterprise Edition</title><content type='html'>&lt;span style="color: rgb(0, 0, 0);"&gt;Java konusundaki ilk sunumumuz olan Introduction to Java Enterprise Edition konusunda izlenimlerimi ve araştırmalarımı paylaşmak adına bu bloğu yazmak istedim.&lt;br /&gt;&lt;br /&gt;Temel bir bakış açısıyla meseleyi değerlendirmek gerekirse, bir uygulamayı yazmadan önce o uygulamanın bütün ayrıntılarını ve planlamasını yapmak şüphesiz ki en önemli adımlardan birisini oluşturmaktadır.Javaya bir nevi giriş seviyesinde olan bu paylaşımı özellikle bu konuya dikkat çekmek isteyerek başlamak istedim.&lt;br /&gt;&lt;br /&gt;Dünya üzerinde geçerli olan bir diğer önemli faktörse ihtiyaç analizidir.Birçok konuda geçerli olan bu faktör yazılım dünyasının de varoluş ve sürdürebilirlik nedenini oluşturmaktadır.Bu açıdan bu konuda ilerlemek ve büyük işler yapmak istiyorsak mutlaka ihtiyaçların karşılanma derecesini önplanda tutmamız çok önemlidir.&lt;br /&gt;&lt;br /&gt;Diyelim ki bütün ayrıntıları hesapladık,planlamamızı yaptık ve gördük ki üzerinde çalışmak istediğimiz uygulama ihtiyaç duyulan bir uygulama kapsamına da giriyor.Bu aşamalardan sonra sözkonusu uygulamayı yazıp piyasa sürmekle işimizin bittiğini düşünüyorsunuz öyle değil mi?Gerçekçi olmak gerekirse asıl iş bundan sonra başlıyor ve bu sürecin çok iyi kontrol edilmesi ve soruna acil çözüm mekanizmaları oluşturulması gerekiyor.Bu kapsamda en fazla karşılaşılan sorunların başında uygulama yazma esnasında çok katmanlı mimariyi kullanmamak geliyor.Bu durum ise modüler çalışmayı sağlamadığından programın bütününde hataları düzeltmek hem zaman anlamında hem de maddi anlamda çok büyük kayıplar yaşatıyor.Ama çok katmanlı mimari yapısını kullanmak bu sorunları çözdüğü gibi,bunun yanında yazılımın çok yönlü ve sistemli geliştirilmesine de bir zemin hazırlamaktadır.&lt;br /&gt;&lt;br /&gt;Bu uzun girişten sonra isterseniz ısınmak adına biraz javaya giriş yapalım... Ne dersiniz?&lt;br /&gt;&lt;br /&gt;Javanın çalışma mantığından kısaca bahsedelim:&lt;br /&gt;&lt;br /&gt;Yazmış olduğunuz java kodu derlendikten sonra bytecode'a çevrilir.Daha sonra JRE(Java Runtime Environment) tarafından sunulan JVM(Java Virtual Machine) vasıtasıyla o anda kullanılan bilgisayarın çalışma mantığına uygun bir yapıya dönüştürülür.Java, platformdan bağımsızdır denilen olayı aslında oluşturan asıl sebep budur.Daha açık bir ifade ile, yazılan kodlar makine üzerinde değil,makinede kurulu olan JVM tarafından çalıştırılır.&lt;br /&gt;&lt;br /&gt;Derlenen java kodlarının bytecode çevrilerek JRE ortamına aktarıldığını söylemiştik.Demek ki öncelikle yapmamız gereken şey makinemize bir JRE kurmaktır. &lt;/span&gt;&lt;a href="http://java.com/en/download/manual.jsp" target="_blank"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;http://java.com/en/download/manual.jsp&lt;/span&gt;&lt;/a&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; adresinden işletim sisteminize uygun olan JRE'yi yükleriz.Yükledikten sonra yüklendiği kontrol etmek için başlat-&gt;run-&gt;cmd yazdıktan sonra karşımıza geken komut satırına&lt;br /&gt;java -version yazdığımızda versiyon bilgileri çıkıyorsa JRE yi doğru ve sorunsuz yüklemişiz demektir.&lt;br /&gt;&lt;br /&gt;Buraya kadar yaptıklarımız javanın çalışma ortamının oluşturulması içindi.Daha sonraki aşama ise kodlarımızı derleyebilmek için complier yükleme aşaması... Java desteklediği özelliklere göre complierler 3 kısma ayırmıştır.Bunlara kısaca değinmek gerekirse:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;J2ME(Java 2 Micro Edition): &lt;/b&gt;Mobil uygulamalar geliştirebilmemiz için vardırlar.Kullanılan fonksiyonlar ve özellikler mobil ortamlara göre sınırlandırılmıştır.&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;J2SE(Java 2 Standart Edition):&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Standart java uygulamaları için kullanırlar.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;J2EE(Java 2 Enterprise Edition):&lt;/b&gt; Yukarıda bahsedilen derleyicileri desteklemekle birlikte ek olarak çok katmanlı proje geliştirme,servlet,jsp gibi birçok özellikleri de kapsamaktadır.&lt;br /&gt;&lt;br /&gt;Çalışmalarımızın çeşitine göre istediğimizi kullanabiliriz ama elbetteki j2EE yi kullanmak ekstra uygulamalar geliştirmelerde avantaj sağlayacağı için şahsen ben bu derleyiciyi kullanmayı tercih ediyorum.&lt;br /&gt;&lt;br /&gt;Şimdi sıra geldi J2EE yi yüklemeye... http://java.sun.com/javaee/downloads/index.jsp adresinden ister standart halini isterseniz ek bileşenleriyle birlikteki halini yükleyebilirsiniz&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-weight: bold;"&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Biliyorum bir kodu çalıştırmak için bu kadar mı uğraşılır, daha bitmedi mi diye düşünebilirsiniz ama javanın güzelliklerini ve anavtajlarını da sağlayan bu ek özellikler olduğu için insan javanın bu presedürlerine katlanıyor :) Geldik son adıma...Yazdığımız kodları notepad ile derlerim ben diyen yoksa bir IDE (Integrated Development Environment) edinmemiz gerekiyor.Netbeans,Eclipse..vb çok fazla IDE mevcuttur,ama ben Eclipse kullanıyorum.İnternet üzerinden http://www.eclipse.org/downloads/ adresinden yükleyebilirsiniz.&lt;br /&gt;&lt;br /&gt;Eclipse yükledikten sonraki aşamadan biraz bahsetmek gerekirse:&lt;br /&gt;&lt;br /&gt;Yukarıdaki adresten yüklediğimiz dosya zip halinde inecektir.Bu dosyayı extract ettikten sonra direk eclipse.exe a tıklayarak programı çalıştırabilirsiniz.İlk çalışmada uygulamalarınızı kayıt edeceğiniz çalışma ortamını(workspace) soracaktır,burayı kendi isteğiniz doğrultusunda belirleyebilirsiniz.&lt;br /&gt;&lt;br /&gt;Bu aşamadan sonra karşınıza Eclipse'nin karşılama ekranı çıkacaktır:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Öncelikle Eclipse'e yüklediğimiz JRE'yi tanıtmamız gerekiyor.Bunun için üst menüde bulunan Window-&gt; Preferences a tıkladığınızda karşınıza gelen pencereden Java'ya tıklayın.Çıkan alt menüden Installed JREs kısmından Add diyerek yüklediğiniz dosyadaki JRE yi gösterin.&lt;/span&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_SMhUc6271rk/SH9KxJP344I/AAAAAAAAAEY/xU6_prZiLpY/s1600-h/eclipse2.jpg"&gt;&lt;/a&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Karşınıza gelen ekrandan JRE Home kısmından browse ye tıklayarak yüklediğiniz JRE'yi seçiyoruz ve işlemi tamamlıyoruz.Böylece Eclipse in gerekli ayarlamalarını bitirdik.Şimdi sıra geldi Eclipse ile nasıl çalışacağımıza...&lt;br /&gt;&lt;br /&gt;Üst menüden File-&gt;New Project dedikten ve karşımıza gelen pencerede projemize ismini yazdıktan sonra bir proje oluşturmuş oluyoruz.Javada paketsel çalışma büyük kolaylık sağladığı için şimdiden paketsel çalışmaya alışmamız açısından öncelikle bir paket oluşturalım.Oluşturduğumuz projenin hemen altında olan src ye sağ tıkladıktan sonra New-&gt;Package dediğimizde karşımıza gelen penreceden com.uygulama.test gibi makul bir paket ismi tanımlayıp işlemizi bitiyoruz.&lt;br /&gt;&lt;br /&gt;Elbette ki daha sonra aşamamız oluşturduğumuz bu paketin içini doldurma aşaması...Oluşturduğunuz paketin üzerine sağ tıklayarak New-&gt;Class diyerek bir class tanımlayalım.Örneğin MerhabaDunya olsun...Ve olusturdugumuz sınıfa aşağıdaki kodları yazalım:&lt;br /&gt;&lt;br /&gt;public class MerhabaDunya {&lt;br /&gt;public static void main( String[] args)&lt;br /&gt;{&lt;br /&gt;System.out.println("Merhaba java dostu,seni burda görmek güzel...");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sıra geldi kodumuzu çalıştırmaya... Çalıştırmak istediğimiz uygulamanın üzerine sağ tıkladıktan sonra Run As'e gelerek Java Application ile çalıştırabilirsiniz.Alt+Shift+X e bastıktan sonra elinizi çekip J tuşuna basarsanız da aynı işlemi yapmış olursunuz.&lt;br /&gt;&lt;br /&gt;Bu giriş kısmından sonra isterseniz bir Dynamic Web Project üzerine bir çalışma yapalım:&lt;br /&gt;&lt;br /&gt;Öncelikle bir ear oluşturalım.Ear, enterprise application project uygulamalarında kullanılan, açılımı erterprise application archive olan bir arşivdir.&lt;br /&gt;&lt;br /&gt;File-&gt;New-&gt;Project-&gt;J2EE-&gt;Enterprise Application Project i seçip next diyoruz.Proje ismimizi SampleEAR olarak belirleyelim.Target Runtime da eğer seçili serveriniz yoksa bir server oluşturmamız gerekiyor.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Server olarak JBoss4.2 kullandım ve &lt;/span&gt;&lt;a href="http://www.jboss.org/downloading/%20projectId=jbossas&amp;amp;url=http://sourceforge.net/project/showfiles.php?group_id=22866&amp;amp;package_id=16942&amp;amp;release_id=548923"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;http://www.jboss.org/downloading/ projectId=jbossas&amp;amp;url=http://sourceforge.net/project/showfiles.php?group_id=22866&amp;amp;package_id=16942&amp;amp;release_id=548923&lt;/span&gt;&lt;/a&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; adresinden bilgisayarıma yükledim.&lt;br /&gt;&lt;br /&gt;Şimdi kaldığımız yerden devam edebiliriz, Target Runtime ın yanında olan new butonuna tıklayarak JBoss4.2v i seçip browse den yukarıdaki linkten yüklediğimiz dosyayı seçip tamam a tıklıyoruz,next e tıklıyoruz.Sadece Generate Deployment Descriptor kısmını işaretleyip finish e tıklıyoruz.Ve böylece ear ımızı oluşturmuş oluyoruz.&lt;br /&gt;&lt;br /&gt;Şimdi sıra geldi, EJB uygulamamızı oluşturmaya... EJB, Enterprise Java Beans in kısaltmasıdır.Genel olarak tarif etmek gerekirse EJB,tüm uygulama sunucularında çalışabilen bir bileşen modeldir.Daha net ifade etmek gerekirse veritabanı ile sunum katmanının arasındaki alandır,yani business katman da denilebilir.&lt;br /&gt;&lt;br /&gt;Ctrl + N -&gt; EJB -&gt; EJB Project e gelip SampleEJB ismini verip Add project to an EAR ı tikleyip next diyoruz.&lt;br /&gt;&lt;br /&gt;Karşımıza gelen pencereden EJB Module ve Java kısmını tikleyip next deyip,bir sonraki adımı da geçerek uygulamamızı oluşturuyoruz.&lt;br /&gt;&lt;br /&gt;Sonunda sunum katmanına gelebildik :) Şimdi Dynamic Web Project imizi oluşturacağız.&lt;br /&gt;&lt;br /&gt;Ctrl + N -&gt; Web -&gt; Dynamic Web Project i seçerek projemizin ismini SampleWAR olarak tanımlıyoruz.En altta bulunan add to project to an EAR kısmını tikleyip next diyoruz.Karşımıza gelen pencereden java,Dynamic Web Module kısımlarını seçip projemizi oluşturuyoruz.Bu projemiz bir kenarda dursun...&lt;br /&gt;&lt;br /&gt;Oluşturduğumuz EJB ye işlerlik kazandırmak ve business katmanında istediklerimizi yaptırmak adına SampleEJB içinde RemoteBusinessInterface adında bir interface oluşturuyoruz ve paketimizi sampleear olarak tanımlıyoruz.&lt;br /&gt;&lt;br /&gt;Oluşturulan interface in kodlarını ekte bulabilirsiniz.&lt;br /&gt;&lt;br /&gt;İnterface ve beanimizi oluşturduktan sonra SampleWAR uygulamamızın üzerine gelip index.jsp adında bir jsp sayfası oluşturuyoruz.index.jsp nin kodlarını ekte bulabilirsiniz.&lt;br /&gt;&lt;br /&gt;Şimdiki adım ise servlet... Servlet,web bağlantılarının sunucu tarafında çalışabilen küçük programlardır diyebiliriz.Servlet sayesinde sunucunun kabiliyetlerini oldukça arttırma imkanına sahibiz.Kısacası servlet ler işin sunum katmanında bulunan bir basamaktır diyebiliriz.&lt;br /&gt;&lt;br /&gt;SimpleWAR projesinden new-&gt;Servlet diyerek MyServlet adında bir servlet oluşturalım.Oluştururken paketimizi sampleear olarak yazmayı unutmamalıyız.İsmi tanımladıktan sonra next diyoruz.Create Servlet kısmında istersek URL Mapping kısmını edit e tıklayarak istediğimiz şekilde değiştirebilirsiniz,ben /sayHello olarak değiştirdim.Ve Servlet imizi finish e tıklayarak oluşturuyoruz.Oluşturulan MyServlet.java kodlarını ekte bulabilirsiniz.&lt;br /&gt;&lt;br /&gt;Ve son olarak SimpleWAR uygulamamızın üzerine gelip Run As-&gt;Run on Server diyerek uygulamamızı çalıştırıyoruz.&lt;br /&gt;&lt;br /&gt;Dynamic Web Project konusunda örneğimizi de sizinle paylaştıktan sonra kaldığımız yerden devam edelim...Bütün bu yapılanlardan sonra bazı çıkarımlarım oldu,isterseniz sizlerle bunları paylaşmak istiyorum:&lt;br /&gt;&lt;br /&gt;*İnterface in javada gerçekten çok önemli bir yeri olduğunu keşfettim.Çünkü,class ların kabiliyetlerini inanılmaz derecede arttırma yeteneklerine sahipler.&lt;br /&gt;&lt;br /&gt;*Paket isimlerini ne olursa olsun yazmamız lazım.Çünkü küçük uygulamalarda bile birçok sorunla karşılaşıyorken geliştireceğiniz büyük uygulamalarda ne kadar büyük sorunlara yol açacağını siz düşünün..&lt;br /&gt;&lt;br /&gt;*Yukarıda bahsetmedik ama fırsat bulmuşken burda bahsedelim.WEN.INF dosyasının altında bulunan web.xml dosyası uygulamamızın ayarlarını oluşturur.&lt;br /&gt;&lt;br /&gt;*WebContent kısmına oluşturduğumuz web sayfalarını koymamız ve bu alışkanlığı kazanmamız standartsak çalışma için ve karmaşık bir çalışma metodundan uzaklaşmamız için çok faydalı olacaktır.&lt;br /&gt;&lt;br /&gt;*@ gibi referans tanımlamaları bizi yeni nesne oluşturma işlemlerinden kurtarıyor.Bu servlet in bize sağladığı en güzel şeylerden birisi olarak görebiliriz..&lt;br /&gt;&lt;br /&gt;*Biraz dikkatli bakarsak görebileceğimiz üzere,servlet ler tıpki bizim kontrol aracımız gibi davranır.Burda tanımlamalar yaparız ve bu tanımlara göre işlemlere servlet yön verir. Bu kadar uzun bir yazı olmasını beklemiyordum ama laf lafı açtı işte :) Umarım faydalı bir yazı olmaya aday bir yazı olmuştur.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Not:&lt;/strong&gt; Yanlış veya eksik kısımlar varsa lütfen paylaşınız.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Kodları indirmek için tıklayınız :&lt;a href="http://www.ieeeksu.org/kodlar.rar"&gt; İndir&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3505418659957917685-3360641737131367878?l=turkcellstaj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://turkcellstaj.blogspot.com/feeds/3360641737131367878/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3505418659957917685&amp;postID=3360641737131367878' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/3360641737131367878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3505418659957917685/posts/default/3360641737131367878'/><link rel='alternate' type='text/html' href='http://turkcellstaj.blogspot.com/2008/07/7gn-introduction-to-java-enterprise.html' title='Introduction to Java Enterprise Edition'/><author><name>Süleyman Diker</name><uri>http://www.blogger.com/profile/01201506146614815559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
