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

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