23 Ekim 2010 Cumartesi

ORACLE TRIGGER YAPILARI

--tablolar uzerinde belirli bir olay olduktan sonra otomatik olarak calısan sistemlere denir.
-- after ,before olmak uzere 2 tiptedir.

--after :işlemler yapıldıktan sonra calısır
--before : normal kosullarda calıstırılmasaı gereken kodların yerine bunu calıstırır.

-- sql serverdaki inserted ve deleted tablolarının yerine :NEW ve :OLD tabloları bulunmaktadır.


--Ornek : urunler tablosuna bir eleman eklendikten sonra o urunadı alınır ve yedek tablosuna aktarılır..
CREATE OR REPLACE TRIGGER DENEME
AFTER INSERT
ON URUNLER
FOR EACH ROW

DECLARE
V_USERNAME VARCHAR2(20);

BEGIN
SELECT USER INTO V_USERNAME FROM DUAL;

INSERT INTO URUNLER_YEDEK(URUNADI,KAYITYAPAN)
VALUES
(
:NEW.URUNADI,V_USERNAME
);

END;


--TEST------
INSERT INTO URUNLER(URUNADI) VALUES('CIZI');

SELECT * FROM URUNLER_YEDEK;

ORACLE SWITCH CASE YAPILARI

--sadece esitlik durumuna bakan bu sistem if yapısına gore daha hızlı calısmaktadır...

DECLARE
OGRCOUNT NUMBER;
BEGIN

SELECT COUNT(*) INTO OGRCOUNT FROM STUDENTS;

CASE OGRCOUNT
WHEN 1 THEN
DBMS_OUTPUT.PUT_LINE('BIR OGRENCI OLSUN YETER BANA');

WHEN 0 THEN
DBMS_OUTPUT.PUT_LINE('OGRENCI YOK');

ELSE
DBMS_OUTPUT.PUT_LINE('BU KADARI DA FAZLA AMA');

END CASE;
END;

ORACLE KOSUL IFADELERI

--IF ELSIF ELSE YAPILARI

--sorgularınızdan gelen nesnelerin durumlarına bakarak işlemler yapmak için kullanılır.

DECLARE
OGRCOUNT NUMBER;
BEGIN

SELECT COUNT(*) INTO OGRCOUNT FROM STUDENTS;

IF OGRCOUNT >1
THEN
DBMS_OUTPUT.PUT_LINE('SINIFIN DURUMU IYI');

ELSIF OGRCOUNT <1
THEN
DBMS_OUTPUT.PUT_LINE('HIC OGRENCI YOK NORMAL DEGIL');

ELSE
DBMS_OUTPUT.PUT_LINE('BIR OGRENCI OLSUN YETER BANA');

END IF;
END;

ORACLE FUNCTION YAPILARI

--yapılan işlemlerden sonra geriye deger donduren sistemlere denir...
--return anahtar kelimesi nesneyi dondurur.

CREATE OR REPLACE FUNCTION KDVLIGETIR(DEGER NUMBER, KDVORAN NUMBER)
RETURN NUMBER
AS
BEGIN
RETURN DEGER * KDVORAN;
END;

-- CALISTIRILMASI
SELECT KDVLIGETIR(100,1.18) FROM DUAL;

--DUAL :  FUNCTION GIBI YAPILARIN CALISTIRILABILMESI ICIN GEREKLI OLAN SANAL TABLODUR.

--sadece functionlar matematiksel işlemler için kullanılmaz. select sorguları gibi soruglar
--içinde kullanılabilir.

CREATE OR REPLACE FUNCTION IDYEGORE(OGRID NUMBER)
RETURN VARCHAR2
AS
V_NAME VARCHAR2(40);
BEGIN

SELECT STUDENTNAME INTO V_NAME FROM STUDENTS WHERE STUDENTID=OGRID;
RETURN V_NAME;

END;

----------CALISTIRILMASI

DECLARE
  OGRID NUMBER;
  v_Return VARCHAR2(200);
BEGIN
  OGRID := 2;

  v_Return := IDYEGORE(
    OGRID => OGRID
  );
  DBMS_OUTPUT.PUT_LINE('v_Return = ' || v_Return);
END;

-- DBMS denilen yapı sorgu sonuclarının goruntulenebilmesi için yaratılmıs bir cıktı merkezidir.
--bu yapı varsayılan olarak kapalıdır. acabilmek için ust menu => Vıew=> Dbms output
-- yesil + işaretine basarak kendinize bir oturum acın...

ORACLE STORE PROCEDURE




--database içerisinde compile edilmiş yani derlenmiş hazır bir halde bekleyen kodlara procedure denilir.
--normal kodlara gore daha hızlı calıslır. kodlar database içerisinde saklandıgı işçin daha guvenlidir.



CREATE OR REPLACE PROCEDURE CEKLE
(
CNAME IN VARCHAR2
)
AS
BEGIN
INSERT INTO CLASSES(CLASSNAME) VALUES(CNAME);
END;

--CALISTIRILMASI

DECLARE
CN VARCHAR2(30);

BEGIN
CN:= 'YV35203';
CEKLE(CNAME=>CN);

END;

--TEST
SELECT * FROM CLASSES;



-- Procedure olarak adlandırdıgımız bu yapılar sql serverda oldugu gibi direkt select sorgularını calıstıramaz.
-- eger select sorgunuzu yazmak isterseniz geriye dondureceginiz tiplerin out parametreli olması gerekir.

CREATE OR REPLACE PROCEDURE IDYEGORESINIF
(
CID IN NUMBER,
CNAME OUT VARCHAR2
)
AS
BEGIN
SELECT CLASSNAME INTO CNAME FROM CLASSES WHERE CLASSID = CID;
END;

ORACLE VIEWLER



-- karmasık select sorgularının defalarca yazılması yerine bunları takma bir ad ile kaydetmek ve
--kısaca cagırmak suretiyle calısır.

--CREATE OR REPLACE : yoksa yarat varsa eskisini sil yenisini yarat...
--Force : eger sistem içerisinde view olusturmak istediğiniz tablo yok ise view için izin verir.

--nonforce : olmayan bir tablo için view yaratılmaz. varsayılan guvenlik ayarıdır.

--with check option : eger sorgunuzda where kriteri var ise ve siz view uzerinden insert yapmak istiyor iseniz
--where kriterine uygun bilgi girmek zorundasınız...

--alias : sorguda yer alan kolonlarınıza yeni ad vermek için kullanılır.. as gibi ....

CREATE OR REPLACE VIEW SINIFLARIGETIR
AS
SELECT * FROM CLASSES;


--CALISTIRILMASI
SELECT * FROM SINIFLARIGETIR;


----**********
CREATE OR REPLACE VIEW IDYEGOREOGRENCI
AS
SELECT STUDENTNAME,STUDENTCLASS FROM STUDENTS WHERE STUDENTCLASS = 1
WITH CHECK OPTION CONSTRAINT SINIFBASKISI;

--***TEST
INSERT INTO IDYEGOREOGRENCI
VALUES('YUCEL','1');

ORACLE VERI TIPLERI

--CHAR : 2000 karaktere kadar olan verileri tutar. sabit uzunluklu bilgileri saklamak için kullanılır.
--NCHAR : char gibidir ancak diger dillerdeki karsılıkları da saklar. Unicode..

--VARCHAR2 : 4000 karaktere kadar bilgi saklar.
--NVARCHAR2 : varchar2 gibidir ancak Unicode degerleri de saklar.

-- NUMBER : int ,tinyint ,money,decimal farketmez hepsini numberda yakalayabilirsiniz.
--kullanımı sqldeki decimal gibidir. Number(x,y) => Number(5,2)
--toplam karakter sayısı 5 : ondalık kısmı 2 olacak demektir.  123,99

--Date : MÖ 1 ocak 4712 ile MS 31 aralık 9999 arasındaki tarihleri temsil eder.

--CLOB : character large object : 4 gba kadar lık metinsel bir ifadeyi saklayabilir.
--varchar(max)a denk gelir.

--BLOB : Binary large onject : 4gblık bir filei dbde saklayabilir. resim,video,mp3,pdf,exe,xls,doc
--varbinarye karsılık gelen tiptir.


ORACLE TABLESPACE YARATILISI




--tabloların birbirine karısmasını engellemek amacı ile kullanılan mantıksal bir kumedir.
--sqldeki database  denk gelmektedir.

CREATE TABLESPACE OKUL DATAFILE 'C:\oraclexe\oradata\XE\OKUL.DBF' SIZE 5M;

-- tablespace yaratıldıktan sonra bu tablo alanını kullanacak olan kisiyi yaratmalısınız.
CREATE USER STUDENT
IDENTIFIED BY HAKAN
DEFAULT TABLESPACE OKUL
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON OKUL;

-- kullanıcının yaratılması baglanabilirsiniz anlamına gelmez. SYS isimli kullanıcının yetki
--vermesi gerekir.  Connect rolune dahil edilmemis birisi Oracle ' a baglanamaz. !!!
-- Other User klasorunun içerisine git -- kullanıcını  bul --sag click Edit --
--Rol ve privligies ayarlarını yap...

--yetkilernizi verdikten sonra bu kullanıcı için bir connection yaratabilirsiniz.

Onemli Oracle Kullanıcıları

--SYS : sql serverdaki sa ya denk gelmektedir.
--SYSTEM : sys kadar olmasa da bazı sistem tablolarından sorumlu admin duzeyindeki kisidir.
--DBSNMP : veri tabanı hakkında istatistiksel verilere ulasabilmek ve raporlarmak için
--gerekli olan kisidir.
--SYSMAN : Enterprise editionda SYS nin karsılıgıdır..

Oracle Tablespaceleri

-- Sistemin tablespace uzantısı : DBF tir. database filedir.
--SYSTEM : oraclein tum aktivitelerini duzenlemesini saglayan sistem tablolarıdır. oracleın ilk
--zamanlarından beri var olan bir tablespacedir.

--SYSAUX: 10g versiyonuna kadar sistemin tum yukunu SYSTEM tablespace cekmisti.
--gunumuzde bu agırlıkla basa cıkamayacagı için yardımcı bir yapı geliştirdi.

--USERS : oracle içerisinde kullanıcıların adlarını ve yetkilerini tutan sistemdir.

--UNDO: transaction işlemleri sırasında işlemler onaylanana kadar eski bilgilerin
--saklandıgı yere denir.

--TEMP: gecici tabloların bulundugu yere temp denilir.

--Control : oracle içerisinde calısan servislerin ve bazı hizmetlerin kontrolunden sorumlu
--birimdir. istatistiksel calısır.

ORACLE EDITIONLAR

Express Edition : 10g surumu en son surumdur. 4 gb veri sınırı bulunmaktadır.
network ortamından birileri servera baglanırsa sayı 15-20 arasındadır.. ancak internet
ortamından gelen istekler soz konusu oldugunda sayı sınırsızdır...

Standart Edition : orta olcekli firmalarda kullanılan sistemdir. yada buyuk firmaların
subelerinde kullanılan sistemdir.

Enterprise Edition: Sınırsız ve en geniş surumdur. Grid Teknolojisine sahiptir.
Grid teknolojisi birden fazla makina bir araya gelerek tek bir makina gibi calısabilir.

ORACLE NEDIR



--1973 yılında ortaya cıkmıstır.
--1521 nolu portu kullanır..
--Microsoft sql server database yonetim sistemidir , Oracle ise veritabanın kendisidir.

19 Ekim 2010 Salı

drupal comment width ayarlamak

Bu kadar basit bir işle ancak bu kadar uğraşılır.
Drupaldaki yorum yazılan width uzunluğu öyle yerlerden çekiliyorki koda girmeden html-yada css den düzeltmek imkansız.

system modüllerinin olduğu dizine gidip /modules/comment dizini altındaki
comment.module içine (biliyorum sistem dosyası olduğunu gir abim sen )
1372 satırdaki
$form['comment_filter']['comment'] = array(
    '#type' => 'textarea',
    '#title' => t('Comment'),
    '#rows' => 15,'#cols' => 50
    '#default_value' => $default,
    '#required' => TRUE,
  );


satıra '#cols' => 50 satırını eklemeniz bu değer varsayılı olan  60px değerini değiştirmenizi sağlıyor.
bu değer nerde varsayılı derseniz onada bakalım hemen :)
system.module içinde 

$type['textarea'] = array('#input' => TRUE, '#cols' => 60, '#rows' => 5, '#resizable' => TRUE, '#process' => array('form_expand_ahah'));
 

18 Ekim 2010 Pazartesi

Show if the following PHP code returns TRUE (PHP-mode, experts only).

Drupal da bir block un nerde görünüp görünmeyeceği genellikle ciddi bir sorundur.
Eğer özel bir block ise ve sadece belli bir content için görünecekse standart drupal ile çözmeniz zor olup birazcık php ile işe girişmek lazım.
Show if the following PHP code returns TRUE (PHP-mode, experts only).

bölümünü seçip
aşağıdaki kıymetli kodu yazmalıyız.
  // Only show if $return is true
  $return = FALSE;

  // Match current node type with story
  if ( (arg(0) == 'node') && is_numeric(arg(1)) )  {
    $nid = arg(1);
    $node = node_load($nid);
    $type = $node->type;
    if($type == "story") {
       $return = TRUE;
    }
    if($nid == "18982"){
       $return = TRUE;
     }
  }
 
  return $return;
  ?>


bu kod ile şöyle demiş oluruz  story isimli  tüm contentlerde ve node id si 18982 olan page de bu blogu göster değilse sakın haaa gösterme.


Not: Bu yazı işine yarayan kişiler en azından yorum eklesinlerki bende bloga sadece kendim için yazmadığımdan emin olayım :)

8 Ekim 2010 Cuma

MYSQL utf8 database import problemi

Veritabanınız UTF8 gibi Türkçe karakterleri içeren bir veritabanıysa normal mysql import işlemlerinde veritabanında türkçe karakterler düzgün görünmez bu yüzden şu komut denenerek import alırsak veritabanımız düzgün görünecektir.
mysql -h host -u username -p password --default_character_set utf8 database < file.sql

 
örnek olarak localdeki bir mysql için(kullanıcı root ve şifre içermiyor.)

mysql  -u root  --default_character_set utf8  database < file.sql

Türkçe Karakter içeren veritabanlarında en iyi sonucu böyle aldım.