Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

Windows does not recognize this MIME type Hatası

Oracle 10g Express Edition’ı kurmak için ORacle’ın sitesine girmiştim.

Aşağıdaki linkten indirme işlemini yapabilirsiniz.

http://www.oracle.com/technetwork/database/express-edition/downloads/index.html

Daha sonra indirdiğimde Windows7 olan işletim sisteminde bu kurulum dosyasını çalıştıramadım ve “Windows does not recognize this MIME type” atasını aldım.

Bunu engellemek için küçük bir hile yaptım ve dosyanın adını değitirerek OracleXE2.exe uzuntılı yaptım ve artık çift tıklayarak kurulumu yapabilecek hale geldim.

Böyle bir problem ile karşılaşan arkadaşlar kolaylıkla bunun üstesinden gelebilirler.

Reklamlar

Mart 30, 2011 Posted by | Oracle | , , , , | Yorum bırakın

C# ile Oracle’a Bağlanma Sorunum

Kurum içerisinden oracle’a bağlanma ihtiyacım olmuştu.Evdeki bilgisayarımda hiç bir ekstra ayar yapmadan kolayca başlanabilmiştim ancak şirkette baya uğraştırdı beni doğrusu ama sonunda oldu. Oracle’a bağlanabilmek için hemen System.OracleClient namespace’ini kullanayım dedim ancak versiyon farkından dolayı bana
System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.
hatasını verdi. Hemen bir araştırma yapıp OracleClient 10.2 yi buldum
OracleClient’ı kurunca NetManager ve Net Configuration Asistant yardımıyla D:oracleproduct10.2.0client_1NETWORKADMIN dizini altına tnsnames.ora ve sqlnet.ora ve listener.ora dosyalarını doğru şekilde oluşturdum.
Toad ile bu tnsname ‘i kullanarak bağlanabiliyordum ancak C#’tan ve sqlplus’ı kullanarak hala erişememiştim. ora-12154 tns could not resolve the connect identifier specified hatası alıyordum.
Bunu aşmak içinde Control Panelin altına ODBC Data Source Administrator’a providerımı Add diyerek ekledim.

Daha sonra da connection stringimi tnsname ile aynı yaptım aşağıdaki gibi ve mutlu son

Mayıs 14, 2010 Posted by | C#, Oracle | , , | Yorum bırakın

Oracle Sql Tuning’e Bir Çırpıda Bakış

Bu makalemizde Oracle ile ilgili bazı temel bilgilere ve özellikle de performans konusunu inceleyeceğiz. Oracle ile performans konusuna girmeden önce konuyla ilgili Oracle veri blokları ve bellek yapısını az da olsa anlamakta fayda var diye düşünüyorum. Temel kavramları anladıktan sonra üzerine inşa etmek daha kolay olacaktır.

Veri Blokları
Data Block :
Mantıksal olarak veri tutan en küçük veri birimidir. Küçükten büyüğe doğru
Extent ,Segment ,Tablespace ,Database olarak devam eder.
Fiziksel olarak ise OS blokları ve data file lerdan oluşur.
Tablespace : Bir dosya sistemindeki klasör gibi nitelendirebiliriz. Mantıksal olarak datafile bazında verileri fiziksel olarak gruplar. Schema ise tablespace’den farklı olarak mantıksaldır ve kullanım hakları ile ilgili bir gruplama yapar. Yani bir schema bir kullanıcının kullanmaya yetkili olduğu objeleri tutar. Bir kullanıcı bir tablespace’deki bütün objeleri kullanamayabilir.

*** : Performans faktörlerinden bir tanesini sistemin nasıl bir sistem olduğu etkiler. İki türlü sistem vardır. Bunlar OLAP(Online Analytic Processing).  yani raporlama sistemi büyük select sorguları çalıştırılır , diğeri ise OLTP (Online Transaction Processing) bu sistemde de küçük sorgular ancak çok kullanıcılı ve yoğun bir sorgu trafiği vardır.
Sistem türüne göre block size’lar belirlenmeli ve gerekli optimizasyonlar yapılmalıdır.
Örneğin çok büyük miktarda veri raporlanıyorsa data bloklar büyük set edilmeli çünkü bir seferde (1 fiziksel okumada)getirilecek veri miktarı daha fazla olur.

Bellek Yönetimi
Oracle yapı itibari ile SGA(System Global Area) ve PGA(Program Global Area) olmak üzere 2 tür bellek yapısı vardır.Bu yapıda SGA bütün veritabanı kullanları için ortak iken PGA ise connection bazlı olarak açılır. bu memory alanları Oracle’da performansı direk olarak  etkiler.Belleklerin iyi paylaştırılması ciddi anlamda performans kazandırır.Zaten tunning yaparken en çok karşımıza sorun olarak IO çıkacak yani performamızı belirleyen en önemli kriterlerden bir tanesi fiziksel okuma. Ne kadar az diske gidersek o kadar hızlanacağımızı aklımızın bir köşesinde tutalım.

*** : Ne kadar az fiziksel diske gidersek o kadar yüksek performans sağlarız. Bellekten çalışmak diskten çalışmaya göre daha hızlıdır.

Yukardaki şekilde de görülen yapıları bizim için önemli olanları kısaca tanımlayalım.
Library Cache : Her sql sorgusu çalıştırıldığında sorgu parse edilir ve bir tane execution plan denilen bir plan oluşturur. Bu plan hangi tabloda hangi indexler ile nereye bağlantı yapıldı , costu ne gibi bir takım özellikleri barındırır. İşte bir sorgu bir kez çalıştırıldığında oluşan execution plan bu bellek alanına yazılır. Eğer aynı sorgu bir kez daha çalıştırılırsa eğer Library Cache’te varsa tekrardan sorguyu parse etmez ve aynı planı kullanarak performans kazanır.
Data Dictionary Cache : Sql cümlesi bir tabloya erişmeye çalıştığında (SELECT * FROM tablo1) bu tabloya select atma hakkı var mı , bu tablonun istatistikleri neler gibi bir takım bilgilerin tutulduğu bellek alanıdır.
Buffer Cache : Bir tabloya bellek alanı boşken ilk sefer select sorgusu çalıştırılırsa direk olarak fiziksel diskten okur.Ancak bir kez çalıştıktan sonra bu bellek alanından okuyarak sonucu daha hızlı getirir.
Large Pool : Paralel ve Shared Server gibi işlerde kullanılabilir. Opsiyoneldir.
Log Buffer : Burada transaction bilgileri var. Veritabanı herhangi bir sebepten dolayı kapanırsa buradan son yapılan çalışmaları elde edebiliriz.

Redo Buffer,Java Pool ve Stream Pool

PGA ise kullanıcı bazlıdır. Oracle’a açılan her bir User process için server tarafında bir server process tahsis edilir. Yani her bir kullanıcı için serverda bellekten yer ayrılır.
*** : Gereksiz connectionların hafızadan temizlenmesi performansı artırır.

*** : Oracle 8i de bellek yönetimi tamamen admine bırakılmıştı.Her bir cache e teker teker boyutlarını vermek gerekiyordu.Library Cache’e ayrı Data Dictionary Cache’e ayrı. 10g ile birlikte sadece PGA ve SGA ya bellek alanları vermek durumundaydık , alt cache’lere teker teker verme zahmetinden kurtulmuş olduk. 11g ile birlikte bu yönetimi Oracle tamamen kendisi yapabilmektedir.

Performansınızı Uçurun

1- Tablo istatistiklerinin yanlış olması : Oracle execution plan oluştururken istatistiklere bakar. İstatistiklerde bir tabloda kaç kayıt var vs gibi bilgiler mevcuttur. Eğer sık insert alan bir tablo ise istatistikler sorgu çalışacağı anda yanlış olabilir.

Bunu bir örnekle modelleyelim. Stok adında bir tablomuz olsun başlangıçta 10 kaydımız var diyelim daha sonra toplu birşekilde tabloya import yaptık ve 9000000 kaydımız oldu diyelm. Oracle normal şartlarda sadece belli zamanlarda tabloların istatistiklerini tekrardan düzenler bu yüzden import işlemini yaptıktan sonra istatistiklerde kayıt sayısı hala 10 görülecektir.

SELECT * FROM Stok WHERE Kategori=’Bilgisayar’ sorgusunu çalıştırdık diyelim.

Stok tablomuzda Katagori kolonunda indeksimiz olmasına rağmen kayıt sayısı az olduğunu sanan Oracle bu indeksi kullanmayıp  Full Table arama yapabilir. Bu da sistemi bir hayli yorar. Halbuki istatistikler tam olsa index range scan yaparak çok daha az maliyet ile kayıtları getirebilir.

2- Sorgularda eşitliğin sol tarafında fonksiyon kullanmak index kullanımına engel olur. Örnek
     SELECT * FROM Stok WHERE UPPER(StokAdi)=’KLAVYE’
Bu sorguda StokAdi kolonunda indeks olsa dahi indeks kullanılmaz ve FULL TABLE çalışır.

3-Sub queryleri FROM’a yazmak en hızlısıdır.
Kötü Örnek:
Select Count(*) FROM Stok S WHERE S.Fiyat < 2*(SELECT AVG(Fiyat) FROM StokHareket          SH WHERE S.StokKod=SH.StokKod)

Düzeltilmiş Örnek:
Select Count(*) FROM Stok S ,(SELECT StokKod,AVG(Fiyat) Fiyat FROM STokHareket GROUP BY StokKod ) SH WHERE SH.StokKod=S.StokKod AND S.Fiyat<2.SH.Fiyat

4- Eğer kesişen kayıt almadığından eminseniz UNION kullanmak yerine UNION ALL kullanmak daha hızlı olacaktır. Çünkü UNION ALL kesişen kayıtlarla uğraşarak vakit kaybetmez.

5- WHERE TO_CHAR(Fiyat) = :fiy yerine WHERE Fiyat = TO_NUMBER(:fiy)

6- ORDER BY,NOT IN,IN,UNION,DISTINCT gibi ifadeler kullanılırken dikkatli olmak lazım çünkü maliyeti çok yüksek.

7- Doğru yerde doğru indeks kullanımı çok önemlidir. Nerede indeks kullanmalı konusu  biraz tecrübe ve biraz da sistemin genel yapısı ile alakalıdır.

8- Çok sık değişen ve küçük tablolarda indeks kullanmak çok da doğru değildir.

9- Genel olarak bütün mantığımız execution planı mümkün olduğu kadar az çalıştırtmak. Library Cache mizde yeteri kadar sorgu çalışmış olmalı. Eğer oracle veritabanı uzun süre çalıştıktan sonra kapanırsa açılınca performansı düşük olacaktır çünkü cache’deki bütün execution planlar silinmş olacaktır. O yüzden veritabanını kapatmamalıyız.

10-Materalized View kullanmak : Eğer sık değişen büyük veriniz varsa mutlaka kullanın.

11- Bir sorguda AND ile bağlanan iki filtre varsa WHERE ad=’KORAY’ AND Soyad=’adsds’ ikili index yapmak bu sorguyu daha çok performanslı çalıştırır.

12- Index kullanırken de ne tip index tipini doğru seçmek gerekir. İki tip indeksimiz var. B-tree ve Bitmap Index. Hangisini kullanacağımıza doğru karar vermek çok önemli. Veri tekrarı az ise B-Tree : Örnek kolon stok kodu , Tekrar eden kayıt çok ise Bitmap : Örnek Cinsiyet. Primary Key ve Unique Key kolonlar B-TREE indekse örnektir.

13- Partition Yapalım. Range,Hash,List …vs Partitions.

14- Birden fazla CPU varsa paralel indexlerden faydalanalım.

15- Cluster kullanımı: Örneğin bir adı,soyadı,tel gibi bilgi çok fazla yerde kullanılıyorsa buları cluster haline getirebiliriz. CREATE CLUSTER ….

16- INDEX ORGANIZE TABLE : Bir tablo çok fazla değişmiyorsa tabloyu yaratırken indeksli yaratırız ve sıralı bir şekilde kaydeder.Çok hızlı select yavaş insert. Primary Key şart
CREATE TABLE …… ORGANIZATOIN INDEX

17-  Data dağılımları düzgün tablolar için bind variable kullanmak hız kazandırır.Çünkü ilk seferde sorgunun execution planı oluşturulur ve bir sonraki değeri farklı dahi olsa bir önceki plandan işlem görür. Örnek bölge kolonu için her bölgede aşağı yukarı 99 ile 101 kayıt varsa kullanmak mantıklı.

HINTS : Execution Planlara Hint ile baskıda bulunup değiştirtebiliriz ancak 11g ile artık buna çok fazla da ihtiyacımız kalmadı. Zaten en iyi maliyetli planı Oracle buluyor. Ancak spesific durumlarda ve test amaçlı kullanılabilir.

SELECT /*+ INDEX(t name_idx)*/ FROM tablo t where name=’koray’
Oracle Enterprise Manager
Oracle’ın yönetimsel aktivitelerini takip etmek için kullanışlı bir uygulamadır. Bu bir Oracle servisidir ve uzun süre alan sql’leri akalamktan tutunda sqller ile ilgili tavsiye vermeye kadar bir çok işlevi vardır. Ayrıca incelenmesi gereken bir konudur.Biz sadece bazı küçük modüllerini inceleyeceğiz.
1- SQL Tunning Advisor : Oracle Enterprise menüsü üzerinden bu araca gelerek mevcut bir sorgunuza olumlu bir tavsiye alabilirsiniz. Örneğin şu tabloda şu kolonda index yap gibi. Mutlaka kullanılması tavsiye edilir.

2- SQL Access Advisor : Index ve Partition tavsiyesinde bulunur. Daha detaylı tavsiyeler içerir.

Sonuç olarak yazımızda Oracle yapısına kısa bir göz attıktan sonra veritabanımızı nasıl dah etkili hale getip performansını iyileştirebileceğimizi gördük. Umarım yararlı olmuştur.

Herkese İyi çalışmalar.

Kasım 21, 2009 Posted by | Oracle | , , , , | Yorum bırakın

Oracle farklı veritabaları arasında sorgu çalıştırma

Eğer Toad ile iki farklı oracle veritabanlarında sorgu çalıştırmak istersek , yani aynı sorgu içinde iki veritanına ait tablolar kullanılacaksa ne yapmamız gerekir size onu anlatacağım.

 

Öncelikle Toad ta iki veritabanı da TNS name leri eklenir ve sorgu çalıştırılacak veritabanından diğer veritabanına DBLink vermemiz gereklidir.

 

Peki bunu nasıl yapacağız. Toad da sol taraftaki menü de bulunan DB Links e gelip Create New Link dememiz gerekiyor. Daha sonra Link verilecek veritanının zaten TNS name i tanımlı olduğu için Database To Connect denen yere bağlanacağımız veritabanını seçiyoruz. Ve bundan sonra artık bu linki kullanacak veritabanları arasında sorgu çalıştırabiliriz.

 

      Örnek : INSERT /*+ APPEND */ INTO tablo1@LINK_ADI

         SELECT * FROM tablo1;

Haziran 10, 2009 Posted by | Oracle | , , , , , | Yorum bırakın

Oracle ile mail gönderme UTL_MAIL.SEND fonksiyonu

Bu makalemizde web sitelerinde sıklıkla başvurduğumuz bir konu olan mail gönderme işlemlerini ele alacağız.Mail gönderme işlemi .NET te System.Net.Mail; sınıfı ile çok kolay bir şekilde yapılabilmekte ancak bu işlemi uygulamamız üzerinde değil de veritabanında halletmek istiyorsak ve Oracle kullanıyorsak UTL_MAIL.SEND fonksiyonunu kullanmak mantıklı olacaktır.UTL_MAIL package’ı default olarak gelmemekte ve kendimiz bu package’ı eklemek durumundayız. Bu package’ı kullanılabilir hale getirme için yapmamız gerekenler :

 

Başlat-Çalıştır-cmd

Daha sonra C:> dizinine gelinir ve

C:>sqlplus sys as sysdba yazılarak sql programı çalıştırılır.

SQL> start C:oracleproduct10.2.0db_1RDBMSADMINutlmail.sql

package ve sysnonim yaratılır

SQL> start C:oracleproduct10.2.0db_1RDBMSADMINprvtmail.plb

Package body yaratılır.

Bu işlemleri illaki komut komut satırında yapmak zorunda değiliz Bu package’ın scriptlerini belirtilen dizinden bulup Toad’tan da çalıştırabiliriz.Yaratıldığından emin olmak için SYS şeması altında Package’lara bakabiliriz.

 

Daha sonra  smtp_out_server ‘ın mail serverını set etmemiz gerekiyor. Bunun içinde aşağıdaki scripti çalıştırmalıyız.

alter system set smtp_out_server = mailserverIP:25′ scope=both;

Bunu da yaptıktan sonra artık bu package’ı kullanacak userımıza hak vermemiz gerekiyor.Onu da aşağıdaki script ile verebiliriz.

grant execute on sys.utl_mail to Username;

 Mail göndermeyi denemek için şunu yapabiliriz :

EXEC UTL_MAIL.SEND(Gönderen Maili’,’Alıcı Maili’ ,NULL,NULL,’Subject’,’Mesaj’ , ‘text/plain; charset=us-ascii’,NULL);

Çalışmıyorsa muhtemelen haklardan veya mail server ile alakalı bir problem olabilir.

 

Şimdi daha gerçekçi bir örnek yapalım.Örneğin Kullanıcı tablomuz olsun ve tabloda mail adresleri bulunsun. Bizden de kullanıcılara aylık bir bilgilendirme maili atmamız istendi diyelim.Bunu yapabilmek için once bir prosedür oluştururuz ve bu prosedür kullanıcı tablosundaki mail adreslerini toparlar.Bu mailin belirli tarihlerde atılmasını sağlamak için de Oracle JOB tanımlarız. Prosedür Scriptimiz

CREATE OR REPLACE PROCEDURE SEND_MAIL1 IS

pRecipient VARCHAR2(2500) := ”;

pSubject   VARCHAR2(100) := ‘ HATIRLATMA’;

pMessage   VARCHAR2(100) := ‘BİZİ UNUTMAYIN‘;

crlf      CONSTANT VARCHAR2(2):= CHR(13) || CHR(10);

mesg      VARCHAR2(5000) := ‘ ‘;

BEGIN

for xtable in (select email from kullanici WHERE OTHER=1) loop

pRecipient :=  pRecipient || xtable.EMAIL || ‘;’;

end loop;

mesg := ‘Date: ‘ ||

TO_CHAR( SYSDATE, ‘dd Mon yy hh24:mi:ss’) || crlf ||

‘From: ‘ || crlf ||

‘Subject: ‘|| pSubject || crlf ||

‘To: ‘||pRecipient || crlf || ” || crlf || pMessage;

UTL_MAIL.SEND(‘mail@hotmail.com’,pRecipient ,NULL,NULL,pSubject,mesg , ‘text/plain; charset=us-ascii’,NULL);

END;

 

JOB SCRİPTİMİZ : Bu scripti TOAD arayüzü üzerinden de create edebilirsiniz.

BEGIN  SYS.DBMS_JOB.REMOVE(41); COMMIT; END;

DECLARE X NUMBER;

BEGIN

SYS.DBMS_JOB.SUBMIT

( job       => X

,what      => ‘SEND_MAIL1;’

,next_date => to_date(‘01.06.2009 00:00:00′,’dd/mm/yyyy hh24:mi:ss’)

,interval  => ‘TRUNC(LAST_DAY(SYSDATE)) + 1’

,no_parse  => FALSE);

SYS.DBMS_OUTPUT.PUT_LINE(‘Job Number is: ‘ || to_char(x));

SYS.DBMS_JOB.BROKEN

(job    => X,broken => TRUE);

COMMIT; END;

Umarım Yararlı Olmuştur.Herkese iyi günler dilerim.

Mayıs 7, 2009 Posted by | Oracle | , , , , | Yorum bırakın

PL SQL Decode Fonksiyonu

Decode fonksiyonu IF-THEN-ELSE yapısını sorgu içerisinde kolayca yapmamızı sağlar.

 

DECODE(kolon_adi,koşul1,deger1,koşul2,deger2,. . .);

Burada kolonun değeri şu ise değer şu olsun şu ise şu olsun kolayca dememizi sağlıyor. Örneğin şöyle bir şeye ihtiyacınız oldu ; id alanınız var ve siz 1-10 arası kayıtlarınızı katagori1 11-20 arası kayıtlarınızı katagori2 olarak select sorgunuzda göstermek istiyorsunuz.

SELECT id,DECODE(trunc ((id – 1) / 10),0,’katogori1′,1,’katagori2′,2)  FROM TabloAdi

Veya

If yrs_of_service < 1 then return 0.04
If yrs_of_service >= 1 and < 5 then return 0.04
If yrs_of_service > 5 then return 0.06

gibi bir şey yapmak istiyoruz.Sorgusu aşağıdaki gibi olacaktır.1 den küçük değerler için 0,04 yazacaktır.

 

SELECT emp_name,
decode(trunc (( yrs_of_service + 3) / 4), 0, 0.04,
  1, 0.04,
    0.06) as perc_value
FROM employees;

 

 

Detaylar için http://www.techonthenet.com/oracle/functions/decode.php adresini inceleyebilirsiniz.

Nisan 30, 2009 Posted by | Oracle | , , | Yorum bırakın

Toad ile şemalar arası veri transferi

  • Toad ile Oracle’da bir tablonun verisi başka şemadaki tabloya aktarmak için:
    Önce işlem görecek iki şemayada bağlanılır.İki şemadaki tablolarda yaratılmış ve aynı kolonlara sahip olmalı. Daha sonra aktarılacak tabloya sağ tıklayıp Copy Data to Another Shema deyip Destination şema seçilir ve EXECUTE denir.

Mart 29, 2009 Posted by | Oracle | , , | Yorum bırakın

PL SQL Örnek 3 : Tabloya satır no ekleyerek veri aktarma

Bir tablodan diğer bir tabloya tüm datayı satır numarası ekleyerek aktarmak.

INSERT INTO Tablo1 (SELECT  ROWNUM,* FROM TEMP )

Mart 21, 2009 Posted by | Oracle | , , | Yorum bırakın

PL SQL Örnekleri 2

4- ) UNION ve LIKE örneği

 

CREATE OR REPLACE PROCEDURE TRNSTELSIM.TV_GR_ANLIK_DURUM(CRS OUT SYS_REFCURSOR , kaydeden NVARCHAR2 ) IS

pkaydeden varchar2(100);

BEGIN

pkaydeden := kaydeden;

OPEN CRS FOR

SELECT Bildirim_Tipi,Kayit_Sayisi   FROM(

SELECT ‘Yeni Sistem Toplam’ As Bildirim_Tipi ,COUNT(V_NO)  AS Kayit_Sayisi FROM TV_GR_YENI_SISTEM WHERE IPTAL = 0 AND KAYDEDEN LIKE pkaydeden||’%’

UNION

SELECT ‘Yeni Sistem Bölge OK’ As Bildirim_Tipi ,COUNT(V_NO)  AS Kayit_Sayisi FROM TV_GR_YENI_SISTEM WHERE DURUM = ‘1’ AND IPTAL = 0 AND KAYDEDEN LIKE pkaydeden||’%’

)

ORDER BY Bildirim_Tipi  DESC;

END TV_GR_ANLIK_DURUM;

 

———————————————————————————————————

5- ) IF ELSE örneği

 

CREATE OR REPLACE PROCEDURE TRNSTELSIM.TV_UPDATE_DURUM(durum1 varchar,durum2 varchar,tip varchar)

IS

BEGIN

IF tip = ‘RL’ THEN

UPDATE TRNSTELSIM.TV_RL_ALICI_FREKANS_DEGISIM SET DURUM = durum1 WHERE  DURUM = durum2 ;

END IF;

IF tip = ‘BTS’ THEN

UPDATE TRNSTELSIM.TV_BTS_ILKTRX_DEGISIM SET DURUM = durum1 WHERE  DURUM = durum2 ;

END IF;

IF tip = ‘GR’ THEN

UPDATE TRNSTELSIM.TV_GR_YENI_SISTEM SET DURUM = durum1 WHERE  DURUM = durum2 ;

END IF;

COMMIT;

Şubat 18, 2009 Posted by | Oracle | , , , | Yorum bırakın

PL SQL Örnekleri 1

Bu yazı dizisi altında projelerimde kullanmış olduğum ve hoşuma giden PL-SQL prosedürlerimi paylaşacağım umarım işinize yarar

———————————————————————————————————

1 – ) İlk prosedürümüz kullanıcı girişinin doğru olup olmadığını kontrol ediyor.

CREATE OR REPLACE PROCEDURE TRNSTELSIM.TV_AUTHENTICATE_USER (

usernamex         NVARCHAR2,

passwordx         NVARCHAR2,

resultx     OUT   NVARCHAR2,

statusx      OUT   INTEGER,

departmentx   OUT   NVARCHAR2,

otherx        OUT   NVARCHAR2,

kullanicikodux  OUT  NVARCHAR2,

siteidx         OUT  NVARCHAR2,

ruhsatnox       OUT  NVARCHAR2,

sistemturux     OUT  NVARCHAR2,

sistemnox       OUT   NVARCHAR2,

grupx           OUT   NVARCHAR2

)

IS

BEGIN

BEGIN

resultx := 1;

SELECT STATUS,DEPARTMENT,OTHER,KULLANICI_KODU,SITE_ID,RUHSAT_NO,SISTEM_TURU,SISTEM_NO,GRUP

INTO statusx,departmentx,otherx,kullanicikodux,siteidx,ruhsatnox,sistemturux,sistemnox,grupx

FROM TV_KULLANICI

WHERE USERNAME = usernamex AND PASSWORD = passwordx;

EXCEPTION

WHEN NO_DATA_FOUND THEN

resultx := 0;

END;

END;

———————————————————————————————————

2- ) İkinci prosedürümüz field ve value ları verilern tabloya insert komutu oluşturuyor. Avantajı  tablomuzda herhangi bir field değişirse prosedürümüz yine de sabit kalıyor

 

CREATE OR REPLACE PROCEDURE INSERT (FIELDS NVARCHAR2, VLS NVARCHAR2

)IS

SQL_STR STRING(3000):=”;

BEGIN

SQL_STR:=  ‘INSERT INTO F_PATH_EDGE ‘ || FIELDS || VLS;

EXECUTE IMMEDIATE SQL_STR;

END INSERT;

 

———————————————————————————————————

3- ) Son bir yılın verisinde ay ve yıla göre gruplama yapan prosedür. Tarih fieldından sadece ay ve yıl bilgisini çekerek grupluyoruz

 

CREATE OR REPLACE PROCEDURE TRNSTELSIM.TV_SP_GR_AYBAZLI_TRXSAYISI(CRS OUT SYS_REFCURSOR,kaydeden NVARCHAR2 ) IS

pkaydeden varchar2(100);

BEGIN

pkaydeden := kaydeden;

OPEN CRS FOR

SELECT EXTRACT(YEAR FROM KAYIT_TARIHI) || ‘-‘ || TO_CHAR(KAYIT_TARIHI,’MM’) As KAYIT_YIL_AY,SUM(TOPLAM_TRX_SAYISI) AS TOPLAM_TRX_SAYISI

FROM TV_GR_YENI_SISTEM

WHERE KAYIT_TARIHI > ADD_MONTHS(SYSDATE, -11)

GROUP BY EXTRACT(YEAR FROM KAYIT_TARIHI) || ‘-‘ || TO_CHAR(KAYIT_TARIHI,’MM’)

ORDER BY EXTRACT(YEAR FROM KAYIT_TARIHI) || ‘-‘ || TO_CHAR(KAYIT_TARIHI,’MM’) ;

END TV_SP_GR_AYBAZLI_TRXSAYISI;

Şubat 18, 2009 Posted by | Oracle | , , | Yorum bırakın