Oracle DB – SQL Veri sonunda ve başındaki boşlukların silinmesi


 

update ser_crm_musteri set FIRMA_UNVANI = RTRIM(FIRMA_UNVANI)
where FIRMA_UNVANI LIKE ‘%   %’
–and crm_id =’KBNFN00492′

both. If no [remstr] is specified, white spaces are removed.

LTRIM(str): Removes all white spaces from the beginning of the string.

RTRIM(str): Removes all white spaces at the end of the string.

Example 1:

SELECT TRIM(‘   Sample   ‘);

Result:

‘Sample’

Example 2:

SELECT LTRIM(‘   Sample   ‘);

Result:

‘Sample   ‘

Example 3:

SELECT RTRIM(‘   Sample   ‘);

Result:

‘   Sample’

Oracle DB Tablo ve Fonksiyon Yetkilendirme


Fonksiyon yetkilendirmesi….

GRANT EXECUTE ON FIND_MAMUL_ADI TO SOS_READONLY_USER;   /*  FONSİYONLARA YETKI VERMEK İÇİN */
Tablo yetki vermek için kullanılan kod
GRANT SELECT ON DEPO2ERP_FIYAT_LISTESI TO TRS_READONLY_USER;
To grant the SELECT privilege on table t to the authorization IDs maria and harry, use the following syntax:

GRANT SELECT ON TABLE t TO maria,harry
To grant the UPDATE and TRIGGER privileges on table t to the authorization IDs anita and zhi, use the following syntax:

GRANT UPDATE, TRIGGER ON TABLE t TO anita,zhi
To grant the SELECT privilege on table s.v to all users, use the following syntax:

GRANT SELECT ON TABLE s.v to PUBLIC

To grant the EXECUTE privilege on procedure p to the authorization ID george, use the following syntax:

GRANT EXECUTE ON PROCEDURE p TO george

To grant the role purchases_reader_role to the authorization IDs george and maria, use the following syntax:

GRANT purchases_reader_role TO george,maria

To grant the SELECT privilege on table t to the role purchases_reader_role, use the following syntax:

GRANT SELECT ON TABLE t TO purchases_reader_role

To grant the USAGE privilege on the sequence generator order_id to the role sales_role, use the following syntax:

GRANT USAGE ON SEQUENCE order_id TO sales_role;

To grant the USAGE privilege on the user-defined type price to the role finance_role, use the following syntax:

GRANT USAGE ON TYPE price TO finance_role;

AYIN/HAFTANIN İLK & SON GÜNÜ


 

AYIN İLK GÜNÜ : Ay bazında Trunc fonksiyonunu kullanabiliriz

SELECT TRUNC(sysdate, 'MM') FROM dual

AYIN SON GÜNÜ : Hazır fonskiyon yazmış adamlar kullan diye ;

SELECT LAST_DAY(sysdate) FROM dual

HAFTANIN İLK GÜNÜ : Ay bazında Trunc fonksiyonunu kullanabiliriz

SELECT TO_CHAR(sysdate - (TO_CHAR(sysdate, 'D')-1),'dd.MM.yyyy') AS PAZARTESI
FROM dual

HAFTANIN SON GÜNÜ : Hazır fonskiyon yazmış adamlar kullan diye ;

SELECT TO_CHAR(sysdate - (TO_CHAR(sysdate, 'D')) + 7 , 'dd.MM.yyyy') AS PAZAR
FROM dual

ROW NUMBER


Tablomuzda (TEST_DATE) gruplar (GRUP_NO) halinde haftanın günlerine (HAFTANIN_GUNU) ait tutar (TUTAR) değerlerimiz var.  Her güne ait en yüksek tutarlı 3 kaydı getirmemiz isteniyorsa, buPARTITION BY ifadesi ve ROW_NUMBER() analitik fonksiyonunun kullanımı için gayet güzel bir örnek olacaktır;

WITH test_data AS (

SELECT 1 GRUP_NO, 1 HAFTANIN_GUNU, 3000 TUTAR FROM DUAL UNION ALL
SELECT 1, 4, 2600 FROM DUAL UNION ALL
SELECT 1, 3, 2700 FROM DUAL UNION ALL
SELECT 1, 6, 2600 FROM DUAL UNION ALL
SELECT 1, 2, 2600 FROM DUAL UNION ALL
SELECT 1, 5, 2600 FROM DUAL UNION ALL
SELECT 1, 7, 2600 FROM DUAL UNION ALL
SELECT 2, 1, 4600 FROM DUAL UNION ALL
SELECT 2, 7, 4200 FROM DUAL UNION ALL
SELECT 2, 5, 4200 FROM DUAL UNION ALL
SELECT 2, 2, 4200 FROM DUAL UNION ALL
SELECT 2, 4, 4200 FROM DUAL UNION ALL
SELECT 2, 3, 4200 FROM DUAL UNION ALL
SELECT 2, 6, 4200 FROM DUAL UNION ALL
SELECT 3, 1, 5000 FROM DUAL

)
SELECT *
FROM ( SELECT a.*, ROW_NUMBER() OVER (PARTITION BY grup_no ORDER BY tutar DESC) rn FROM test_data a)
WHERE rn < 4

Görüldüğü gibi ROW_NUMBER() OVER (PARTITION BY grup_no ORDER BY tutar DESC) ifadesi ile test verimizi gruplar halinde ayrı değerlendirerek tutarlarımızı azalan şekilde sıralayıp her birine bir sıra numarası veriyoruz. Bu sıra numaramızı da 4 ten küçük olacak şekilde sınırlandırınca istediğimiz sonuca ulaşmış oluyoruz

Oracle – PL-SQL LISTAGG (Satırı sütün olarak gürüntülemek)


Herhangi bir satır bilgisinin Sütün gibi virgülle yan yana yazılması için “LISTAGG” fonksiyonunu kullanılabilmektedir.

select

deptno,
listagg (ename, ‘,’) WITHIN GROUP (ORDER BY ename)
enames
from
emp
group by
deptno;

DEPTNO     ENAMES
———- ————————————————–
10 CLARK,KING,MILLER
20 ADAMS,FORD,JONES,SCOTT,SMITH
30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD

SQL TABLODA REPLACE KULLANIMI VE TIRNAK KAREKTERİ DEĞİŞİMİ


UPDATE SOS_OBJ_DEF SET OBJ_EXPLANATION = Replace(OBJ_EXPLANATION,’chr(39)’, ””)

UPDATE myTable
SET myField = REPLACE(myField, '''', '"');

Oracle 11g Recovery Manager


Oracle 11g Recovery Manager (Rman) Teknolojisi 

Oracle Recovery Manager(RMAN) teknolojisi, veritabanının gerek bütünsel gerekse tablespace bazlı olarak yedeğinin alınması ve felaket anında yedekten belirli zaman dilimine yada SCN numarasına dönülmesi şeklinde özetlenebilir.  Oracle 11g veritabanı sürümü ile RMAN teknolojisine pek çok yenilik eklenmiştir. Data Recover Tavsiyecisi(Advisor), muhtemel oluşabilecek hataları analiz etme ve en azından bir tane tamir seçeneğini sunması ile oluşabilecek herhangi bir uygulama hatasından once problemleri teşhis eder ve böylece veritabanının kesintisiz çalışması ve bütünlüğünün bozulmaması için üst düzey bir koruma saplar. Bu amaçla ise RMAN’ın list failure, change failure, advise failure ve repair failure gibi Oracle 11g ile yeni gelen tamir komutları kullanılır.  RMAN, flashback alanı dolu olduğu takdirde arşivlenlenmiş redo günlüklerini kullanır. Duplicate komutu ile de kopya veritabanı veya fiziksel standby veritabanı, yedek dosyalarına gerek kalmaksızın oluşturulabilir.

RMAN teknolojisi, üretim veritabanında yedekleme esnasında performans kaybının olmaması amacıyla recovery katalog metodunu kullanır. RMAN işlemleri sırasında kullanılmak üzere başka bir sunucu üzerinde(veya aynı sunucuda) oluşturulan bir veritabanı, recovery katalog rolüne sahip olur.  RMAN recovery kataloğu, recovery verisini, kendi ayarlarını ve hedef veritabanı şemasını içermektedir. Hedef veritabanının kontrol dosyası bu veriyi, scriptleri saklamak, hedef veritabanı kontrol dosyasının kopyasını sağlayabilmek amacıyla kullanır ve bu sebeple RMAN işlemlerinde recovery kataloğu kullanmak tavsiye edilir.

RMAN Teknolojisinin Geleneksel Yedekleme Teknolojileri Karşı Avantajları

  • ·         Kullanılmayan blokların atlanması: Bir tabloda daha onceden yazılı olmayan bloklar (High Water Mark(HWM) üstünde kalan bloklar gibi) yedeklenmez. Geleneksel yedeklemede hangi bloğun kullanıldığı bilinmediğinden bu atlama işi olamaz.
  • ·         Yedeğin sıkıştırılması(Compression): Oracle’a özgü binary sıkıştırma metodu kullanarak, Oracle data blokları üzerinde bulunan farklı veri tipleri için maksimum sıkıştırma yapılarak backup cihazı üzerinde boş alan ayrılabilir. (“RMAN> configure device type disk backup type to compressed backupset” komutu ile aktive edilir)
  • ·         Veritabanı yedeklerini açma: alter tablespace …. begin/end backup cümleleri kullanmaya gerek kalmadan tablespace yedeklemesi kolayca yapılabilir.
  • ·         Gerçek artalan(incremental) yedekleme: Geri kurtarma esnasındaki süreyi kısaltmak için en son yedekten sonraki değişmeyen yedekler yedek setine yazılmaz. Böylece, CPU süresi, I/O süresi ve disk alanında performans sağlanır. RMAN, geri yükleme ve kurtarma işlemlerinde artalan güncelli yedekleri kullanır.
  • ·         Blok seviyesinde geri kurtarma: Downtime süresini düşürmek için Oracle blok seviyesinde geri kurtarmayı destekler. Bir tablespace, sadece bozulmuş blokların onarma işlemi seviyesinde kapalı kalmaz.
  • ·         Çoklu I/O kanalları: Yedekleme ve geri kurtarma işlemlerinde Oracle birden fazla I/O kanalları açabilir, böylece disk üzerindeki işlemler hızlanmış olur. (“RMAN> configure device type disk parallelism <kanal sayısı> backup type backupset” komutu ile aktive edilir)
  • ·         Platform bağımsız: RMAN her türlü donanım ve işletim sistemi üzerinde aynı komutlarla kullanılır.
  • ·         Kataloglama: Tüm RMAN kayıtları hedef bir veritabanı kontrol dosyası içinde kayıt edilir. Manuel takibe gore avantaj sağlar.
  • ·         Şifreli Yedekleme: Oracle 11g sürümü ile yedekleri şifreli olarak saklama imkanı vardır.

Ambar Veritabanının Oluşturulması

Ambar veritabanı olarak RMAN yedeklerinin tutulacağı bir veritabanı oluşturulmalıdır. Bu veritabanı recovery kataloğu olarak kullanılacaktır. Şimdi sırasıyla recovery catalog oluşturma işlemine başlayalım.

  1. 1.       Recovery Catalog olarak kullanılacak hedef veritabanına bağlanılır. Örneğimizde ambar veritabanının ORACLE SID’si “katalog” şeklindedir. Üretim veritabanımızın SID’si ise “orcl” dir.

 

$  sqlplus sys/***@katalog as sysdba

 

  1. 2.       Ardından RMAN tablespace içindeki recovery katalog ve RMAN kullanıcısı oluşturulur. Ardından bu RMAN kullanıcısına haklar verilir.

 

SQL> create tablespace rman datafile ‘/u01/app/oracle/oradata/katalog/rman01.dbf’

         size 125m autoextend on next 50m maxsize 500m;

SQL> create user rman identified by ****

          default tablespace rman

          quota unlimited on rman;

SQL> grant recovery_catalog_owner to rman;

 

  1. 3.       Artık ambar veritabanında RMAN kullanıcı yer almaktadır. RMAN’I çalıştırıp kataloğa bağlanabilir ve create catalogkomutu ile ambarı tanımlayabiliriz.

 

$ rman catalog rman/rman@katalog

RMAN> create catalog;

 

  1. 4.       Şimdi “orcl” adlı üretim veritabanımızı, RMAN ambarındaki “katalog” adlı hedef veritabanına kayıt etmemiz gerekecek. Bu işlem hedef veritabanı şeması ve hedef veritabanı tekil kimlik numarası(DBID) gibi bilgileri kayıt etmeye yarar. Hedef veritabanı bir sefer kayıt edilmelidir, takip eden tüm RMAN oturumu bağlantılarında, artık ambardaki doğru metadata referans olarak kullanılacaktır.

 

$ rman target sys/***@orcl catalog rman@katalog

RMAN> register database;

 

Full Yedekleme İşlemi

 

Örneğimizde flashback recovery alanına tüm veritabanı dosyalarının ve SPFILE’ın backupsetlerini kullanacağız.Compressed seçeneği opsiyoneldir ve yedeği sıkıştırarak almaya yarar.

 

RMAN> backup as [compressed] backupset database spfile;

 

Yedeklerin hedef veritabanı kontrol dosyası ve RMAN ambarı içinde kataloglandığını görmek için list komutunu kullanabiliriz.

 

RMAN> list backup by backup;

 

Sadece tablespace’lerin yedeğini almak için ise;

 

RMAN> backup as backupset tablespace <tablespace_ismi>;

 

Sadece data dosyalarını yedeklemek içi ise;

 

RMAN> backup as backupset datafile ‘<data_dosyası_yeri&ismi>’;

 

Sadece kontrol dosyası ve SPFILE yedeklemek için;

 

RMAN> backup current controlfile spfile;

 

Artalan(Incremental) Yedekleme İşlemi

 

Artalan yedeklemenin en büyük avantajı geri yükleme esnasında zaman kaybının azalması şeklinde özetlenebilir. En son alınan yedek sonrasında, değişen blok içindeki veriler yedeklenir. İki tür artalan yedekleme vardır.

  • ·         Level 0: Bu seviyedeki artalan(incremental) yedeklemede, yedek en son full yedek sonrasından alınır
  • ·         Level 1: Bu seviyedeki artalan(differential) yedeklemede, yedek en son alınan incremental(Level 0) yedekten, aksi takdirde en son full yedek sonrasından alınır.

Yedekleme için saklama aralığı(retention period) olarak tanımlanan zamandan ilerde arşivlenmiş yedeği bulunmayan data dosyalarını listelemek için aşağıdaki komutu çalıştırmak yeterlidir;

                 RMAN> report need backup;

Eğer bu rapor sonucu herhangi bir yada daha fazla data dosyası listelenirse, bunların incremental yedeğini almak için aşağıdaki komut çalıştırılır;

                 RMAN> backup incremental level 0 database;

 

Artalan Yedeklerde Blok Değişikliğinin İzlenmesi

 

Artalan yedeklerde en büyük sorun, çok büyük veritabanlarında en son yedek sonrasında hangi blokların değiştiğini hesaplamasında yaşanan zaman ve performans kaybıdır. Oracle bunun önüne geçmek için değişiklik izleme numarası ile hangi blokların değişikliğe uğradığını kolayca izler ve artalan yedeklemede bu izleme numaralarını kullanarak zaman kaybının önüne geçilir. Blok değişikliği izlemesinin veritabanında etkinleştirilmesi için aşağıdaki SQL cümlesi çalıştırılmalıdır.

 

                 SQL> alter database enable block change tracking

                           using  file ‘+DATA’;

 

Yedeklerin geçerliliğinin gözden geçirilmesi ve tasdik edilmesi

 

Yedek alınan dosyaların zaman içinde bozulup bozulmadığını gözlemlemek için backup validate database [archivelog all]komutu kullanılır. Archivelog all takısı, arşivlenmiş redo log dosyalarınında sağlamlığını test eder. Geri yükleme esnasında bu komut checkup amaçlı kullanılmalıdır.

 

Geri Kurtarma(Recovery) İşlemleri

 

RMAN ile blokları, veri dosyalarını, tablespaceleri ve hatta tüm veritabanını dahi geri kurtarabiliriz.

 

  • ·         Blok Media Recovery: Bir veya birden fazla data bloğunu kurtarabilmek için RMAN, veri dosyası içinden veri dosyası numarası ve blok numarasını bilmek zorundadır. insert veya select durumlarında dahi bozuk bloklar tespit edilebilir. V$DATABASE_BLOCK_CORRUPTION görünümünede sorgu çekilirse veritabanındaki bozuk bloklar adresleri ile listelenir. Aşağıda örnek bir hata mesajı yer almaktadır.

 

                      ORA-01578: ORACLE data block corrupted (file # 8, block # 374)

                      ORA-01110: data file 6: ‘/u01/app/oracle/oradata/orcl/deneme02.dbf’

Bu bozuk bloğu kurtarmak için aşağıdaki komutu çalıştırmak yeterli olacaktır.

 

                                  RMAN> recover datafile 8 block 374;

  • ·         Kontrol dosyasını geri kurtarma: Kontrol dosyasının kopyalarından birisi kaybolduğunda veya bozulduğunda ise aşağıdaki işlemler uygulanmalıdır. Aşağıdaki örnekte “katalog” adlı ambar veritabanımızı kullanmaktayız.

 

                                  SQL> startup mount;

                                   ……

                                  RMAN> restore controlfile;

  • ·         Tablespace geri kurtarma: Eğer bir tablespace’e ait veri dosyalarını içeren fiziksel disk bozulursa, veritabanının çalışmasını kesintiye uğratmadan bu tablespace’in geri kurtarma işlemini yapabiliriz.

 

                  RMAN> sql ‘alter tablespace <tablespace_ismi> offline immediate;

                  RMAN> restore tablespace <tablespace_ismi>;

                  RMAN> recover tablespace <tablespace_ismi>;

                  RMAN> sql ‘alter tablespace <tablespace_ismi> online;

  • ·         Veri dosyasını geri kurtarma: V$DATAFILE_HEADER sorgusunu kullanarak belirlenen kayıp yada bozuk veri dosyaları bu dosyanın ait olduğu tablespace ONLINE durumda iken bile geri kurtarılır.             

 

                RMAN> restore datafile  <veri_dosyası_numarası>;

                RMAN> recover datafile  <veri_dosyası_numarası>;

  • ·         Tüm veritabanını geri kurtarma: Tüm veritabanının geri kurtarılması durumunda aşağıdaki adımlar uygulanır.

 

                RMAN> startup mount;

                RMAN> restore database;

                RMAN> recover database;

                RMAN> alter database open;

  • ·         Zaman bazlı geri kurtarma:  Bu metotta veritabanında sorun meydana gelmeden önceki zaman dilimine veya SCN numarasına geri yükleme ve kurtarma işlemidir. Oracle 11g sürümü ile RMAN içinden list failure komutu ile veritabanında oluşan bir hata listelenir, böylece uyarı günlükleri veya izleme günlüklerinden potansiyel hata aramak zahmetinden kurtulunur. advise failure komutu ilede listelenen potansiyel hataya ne önlem alınacağının tavsiye raporudur ve veritabanı yöneticisine sadece Oracle 11g Veri Kurtarma Tavsiyecisinin oluşturduğu otomatik tamir scriptlerini çalıştırmak kalır

 

                RMAN> list failure;

                RMAN> advise failure; 

                RMAN> repair failure;          

  • ·         Arşiv redo günlük dosyalarını kullanarak geri kurtarma: Belirli bir zaman dilimine geri dönme ihtiyacı olduğunda Flashback Database özelliğinin yanısıra kayıtlı mevcut arşivlenmiş redo günlük dosyalarıda kullanılabilir.

CREATE TABLE Komutu (CREATE TABLE Statement)


Bir veritabanı içerisinde, kullanıcıların veri girmeleri, değiştirmeleri ve sorgulamaları yapacakları bilgi dosyalarının yaratılması gereklidir. Bu yaratılan tablolara, sistemde yer alan tüm kullanıcılara veya belli kullanıcılara erişim yetkileri verilmelidir. Bu erişim yetkileri, dosyaya kayıt ekleme, silme, değiştirme ve kayıtları seçme yetkilerinden biri olabilir.

Veritabanını oluşturan tabloları yaratan komut CREATE TABLE dir. Bu komutla ; yaratılacak olan tablo ve bu tabloyu oluşturan alanlar, bu alanların tipleri, bu tabloya erişim özellikleri ve bu tablonun diğer tablolarla olan ilişkileri belirlenecektir.

CREATE TABLE tablo_adı (

Alan_adı    veritipi,

Alan_adı    veritipi,

Alan_adı    veritipi,

Alan_adı    veritipi,

CONSTRAINT adı PRIMARY KEY (alanadı,alanadi…),

CONSTRAINT adı FOREIGNKEY alanadi REFERENCES tablo_adi (alan_adi)

)

TABLESPACE tablespace_adi

STORAGE

(INITIAL          değer

NEXT             değer

MINEXTENTS       değer

MAXETTENTS       değer

PCTINCREASE      değer);

TABLO_ADI : Kullanılacak amaca uygun olarak, anlaşılabilir, türkçe karakterler ve özel karakterler içermeyen bir isim olmalıdır.

ALAN_ADI : Tablo içersinde çeşitli tipteki verilerin saklanacağı alanlara verilen isimlerdir. Burada da kullanım amacına uygun, anlaşılır ve türkçe ve özel karakterler içermeyen bir isim olmalıdır.

Kullanıcıların bu isimleri verirken daha önce dikkatini çekmeye çalıştığım özelliklere uymalarını bir kez daha hatırlatıyorum. Tablo adına bakıldığında bu tablonun ne için yaratıldığı, hangi özellikte olduğu anlaşılmalı aynı şekilde tablo içindeki alanlara verilecek olan isimlerinde barındıracağı bilgiyi açıklayıcı şekilde olmasına dikkat edilmelidir. İleri zamanlarda bu tabloya ve alan isimlerine bakıldığında hem yaratıcı hem de diğer kişilerin kolaylıkla anlamaları açısından belirli kurallara uyulması tavsiye edilmektedir. Proje bazında kullanılacak bu tablolara proje bölüm (STK, FIN, MUH vb.) takılarının eklenmesi, tablonun hangi tipte olduğunun (Parametre, Master vb.) belirtilmesi standartlarına uyulmasına dikkat ediniz.

VERİTİPİ          : Alanların hangi tipte veriyi hangi uzunlukta barındıracağının belirlenmesidir. Veritipleri içinde en çok kullanılanlar ; CHAR, VARCHAR2, NUMBER, DATE, şeklindedir.

PRIMARY KEY   : Tablo içindeki kayıtlara hızlı erişimlerde kullanılacak bir veya birden fazla alanların tanımlanması için kullanılır. En önemli özelliği bu alanlara girilecek değerlerin boş olmaması ve tekrar etmiyor olmasıdır. Bir tablo, sadece bir tek PRIMARY KEY özelliğine sahiptir. Tablolar arasındaki ilişkilendirmelerde kullanılmaktadır.

FOREIGN KEY   : Bir tablo içinde belirtilen alanların başka tablolarla bağlantısının sağlandığı ifade şeklidir. Bu özellik sayesinde belirtilen alana girilecek değer, gösterilmiş olan diğer tabloda ki alana önceden girilmiş değerler arasından olmak zorundadır. Böylece verilerin güvenilirliği, doğruluğu sağlanmış olacaktır.

PRIMARY KEY ve FOREIGN KEY ile ilgili detay bilgiler ileriki sayfalarda örnekler ve açıklamaları ile verilmektedir.

TABLESPACE     : Bu tablonun hangi tablespace üzerinde yaratılacağının belirlenmesi için kullanılır. Veritabanın kurulması sırasında kullanıcı tablolarının hangi tablespace üzerinde tutulacağı belirlenmiş olduğundan bu alan isminin kullanılması zorunludur. USER_DATA isminde bir tablespace tanımlaması yapılmışsa burada TABLESPACE user_data şeklinde kullanılmalıdır.

STOREGE bölümü altında ; bu yaratılan tablonun boyutunun, genişleme şartlarının ve bu tabloya erişim büyüklüklerinin değerleri tanımlanır.

(INITIAL          değer

NEXT             değer

MINEXTENTS       değer

MAXETTENTS       değer

PCTINCREASE      değer);

SQL ALTER TABLE KOMUTU


Bazen mevcut tablomuzda değişiklik yapmamız gerekir. Var olan tabloya bir alan eklemek, var olan alanın adını, tipi ,boyutunu vs. değiştirmek gibi. Bu tür tablo düzenleme işlemleri için SQL’in “ALTER” komutunu kullanıyoruz. Bu makalemizde,SQL Alter komutu ile yapabileceğimiz işlemleri tek tek inceleyeceğiz. Öncelikle örnek olarak kullanabileceğimiz bir tablo oluşturuyoruz.Tablomuzun adı Personel.

Create scripti:

CREATE TABLE Personel
(
Id int,
Adi vharchar(50),
Soyadi vharchar(50),
DogumTarihi DateTime
)

Tabloya yeni kolon eklemek:

Mevcut tablomuza yeni bir alan eklemek için kullanılan genel ifade:

Click here to find out more!
ALTER TABLE Tablo_adı
ADD Alan_adı Alan_türü

Örnek olarak Personel tablomuza Doğum yeri için bir alan açalım:

Alter Table Personel
Add DogumYeri vharchar(50)

Eklediğimiz alana ait özellikleri daha da özelleştirebiliriz. Mesela Cinsiyet adında, tipi bit olan bir alan ekleyelim, boş olamasın, ve default değeri False olsun

Alter Table Personel
Add Cinsiyet Bit Not Null Default ((0))

Tabloya birden çok kolon eklemek:

Mevcut tablomuza tek seferde birden çok alan eklemek için genel ifade:

ALTER TABLE Tablo_adı
ADD (Alan_adı1 Alan_türü1, Alan_adı2 Alan_türü2, …)

Örnek olarak Personel tablomuza Tc Kimlik numarası ve SSK numarası için bir alan açalım:

Alter Table Personel
Add ( TCKimlikNo int not null, SSKNo int null)

Tabloya Primary Key eklemek:

Mevcut tablomuza bulunan bir alanı primary key yapmak için kullanılan genel ifade:

ALTER TABLE Tablo_adı
ADD PRIMARY KEY (Alan_adı)

Örnek olarak Personel tablomuza bulunan Id alanını Primary key yapalım:

Alter Table Personel
Add Primary Key (Id)

Mevcut tablomuza yeni bir alan ekleyip, primary key yapmak için kullanılan genel ifade:

ALTER TABLE Tablo_adı
ADD Alan_adı Not Null PRIMARY KEY

Örnek olarak Personel tablomuza ID2 adında bir alan ekleyip, Primary key yapalım:

Alter Table Personel
Add ID2 int Not Null IDENTITY(1,1) Primary Key

Tablodaki alanın Primary Key özelliğini silmek: Mevcut tablomuza bulunan primary key alanın bu özelliğini kaldırmak için kullanılan genel ifade:

ALTER TABLE Tablo_adı DROP CONSTRAINT Alan_adı

Örnek olarak Personel tablomuza bulunan Id alanının Primary key özelliğini kaldıralım:

Alter Table Personel Drop Constraint Id

Tablodaki kolonun adını değiştirmek:

Mevcut tablomuzdaki bir alanın adını değiştirmek için kullanılan genel ifade:

Oracle için:

ALTER TABLE Tablo_adı
CHANGE alan_adı_eski to alan_adı_yeni

Örnek olarak Personel tablomuza eklediğimiz “TCKimlikNo” alanının adını TcNo yapalım:

Alter Table Personel Change TCKimlikNo to TcNo

MySql için:

ALTER TABLE Tablo_adı RENAME COLUMN alan_adı_eski to alan_adı_yeni

Örnek olarak Personel tablomuza eklediğimiz “TCKimlikNo” alanının adını TcNo yapalım:

Alter Table Personel Rename Column TCKimlikNo to TcNo

Sql server için:

EXEC sp_rename ' Tablo_adı.[alan_adı_eski]', alan_adı_yeni, 'COLUMN'

Örnek olarak Personel tablomuza eklediğimiz “TCKimlikNo” alanının adını TcNo yapalım:

EXEC sp_rename Personel.[TCKimlikNo], TcNo ,'COLUMN'

Tablodaki kolona ait bilgileri değiştirmek:

Mevcut tablomuzda var olan bir alanın bilgilerini değiştirmek için kullanılşan genel ifade:

ALTER TABLE Tablo_adı ALTER COLUMN alan_adı alan_türü

Örnek olarak Personel tablomuza yukarda eklediğimiz SSK numarasının tipini varchar olarak değiştirelim:

Click here to find out more!
Alter Table Personel Alter Column SSKNo Varchar(20)

Bu komutu kullanarak alana ait ‘Allow Null’, yani boş bırakma özelliğini de değiştirebilirz. Örnek olarak doldurulması zorunlu yaptığımız TCKimlik Numarası nullable yapalım:

Alter Table Personel Alter Column TcNo int null

Tablodaki bir kolonu silmek:

Mevcut tablomuzda var olan bir alanı silmek için kullanılan genel ifade:

ALTER TABLE Tablo_adı DROP COLUMN alan_adı

Örnek olarak Personel tablomuza yukarda eklediğimiz SSK numarası alanını silelim:

Alter Table Personel Drop Column SSKNo

Tablomuzda bulunan bir alanı sildiğimizde, o alandaki bütün datalar silinir. Eğer sildiğimiz alan composite primary key ise, hem o alan silinir hem de tabloda yinelenen kayıtlar silinir.

Tablodaki bir kolona index eklemek /indexi kaldırmak: Mevcut tablomuzda var olan bir alana index eklemek için kullanılan genel ifade:

ALTER TABLE Tablo_adı ADD INDEX Index_Adı (alan_adı)

Örnek olarak Personel tablomuzda bulunan ‘Adi’ alanını indexleyelim:

Alter Table Personel Add index Index1 (Adi)

Mevcut tablomuzda var olan bir indexi silmek için kullanılan genel ifade:

ALTER TABLE Tablo_adı DROP INDEX Index_Adı

Örnek olarak Personel tablomuzda bulunan ‘Adi’ alanının indexini silelim:

Alter Table Personel Drop index Index1

Tablodaki bir kolona Constraint eklemek / Constrainti kaldırmak:

Mevcut tablomuzda var olan bir alana Constraint eklemek için kullanılan genel ifade:

ALTER TABLE Tablo_adı ADD CONSTRAINT constraint_Adi UNIQUE (alan_adı)

Örnek olarak Personel tablomuzda bulunan ‘TCNo’ alanına Constraint ekleyelim:

Alter Table Personel Add constraint constraint1 Unique (TCNo)

Mevcut tablomuzda var olan bir Constraint i silmek için kullanılan genel ifade:

ALTER TABLE Tablo_adı DROP CONSTRAINT constraint_Adi

Örnek olarak Personel tablomuzda bulunan ‘TCNo’ alanının constraintini silelim:

Alter Table Personel Drop constraint constraint1

Tablonun adını değiştirmek:

Mevcut tablomuzun adını değiştirmek için kullanılan genel ifade:

ALTER TABLE Tablo_adı_eski RENAMA TO Tablo_adı_yeni

Örnek olarak Personel tablomuzun adını “Calisan” olarak değiştirelim :

Alter Table Personel Rename to Calisan

Sonuç Tablosundan Tablo Oluşturma



Select Into
 ifadesi kullanılarak, select sorgusu ile elde edilen veriler into ifadesi ile geçici bir tablo içine yazılabilir.

Geçici tablolar ikiye ayrılır:

  • Yerel Geçici Tablolar (Local Temporary Tables)
    SQL Server’a her bağlanıldığında SQL Server yeni bir oturum açar. Oluşturulan geçici tablolar sadece açılan oturumlar için geçerlidir. Yerel Geçici Tablolar (Local Temprory Tables), sadece tabloyu oluşturan kişi tarafından görülebilir ve o kişi oturumu kapattığı zaman otomatik olarak tablo silinir. Yerel geçici tablolar oluşturulurken tablo adının önüne “#” işareti konulur.
  • Genel Geçici Tablolar (Global Temporary Tables)

    Genel Geçici Tablolar (Global Temprory Tables) ise, açıldığı veritabanına bağlı olan kişiler tarafından görülebilir ve kullanılabilir, yerel geçici tablolardan tek farkı budur. Veritabanına bağlı kişilerin hepsinin oturumlarını kapatmasıyla genel geçici tablolar otomatik olarak silinirler. Genel geçici tablo oluşturmak için ise tablo adının önüne “##” işareti konulur.

Uygulama:

Uygulamada kullanılan ogrenci tablosu:

 

Ogrenci tablosundan istenilen verilerin çekilmesiyle oluşturulan Yerel Geçici Tablo:

SELECT
ad AS ogrenciAdi,
soyad AS ogrenciSoyadi,
girisYili,
(zorunluKredi – verilenKredi) AS kalanKredi,
(zorunluStajGunu – yapilanStajGunu) AS kalanStaj
INTO #OgrenciBilgi
FROM ogrenci

SELECT * FROM #OgrenciBilgi

Ogrenci tablosundan istenilen verilerin çekilmesiyle oluşturulan Genel Geçici Tablo:

SELECT
ad AS ogrenciAdi,
soyad AS ogrenciSoyadi,
bolum,
verilenKredi,
yapilanStajGunu
INTO ##OgrenciBilgi2
FROM ogrenci

SELECT * FROM ##OgrenciBilgi2