T-SQL Gerçek Ad ve Soyadlarından Rastgele Veri Üretmek

Kimi zaman test ortamlarında kullanılmak üzere rastgele oluşturulmuş verilere ihtiyaç duyulmaktadır. Bu ihtiyaçların başında da rastgele oluşturuluş kullanıcı listesidir. Bu yazımızda kullanıcıların adı ve soyadlarını bir kolonda tutan (FullName) veri tabanı için rastgele ad soyad listesi ve bu ad soyad listesinden faydalanarak kullanıcı adları ve mail adresleri oluşturacağız.

Bu işlem için adımlarımız şöyle olacak;

Mevcut gerçek verileri tutmak için bir geçici tabloyu ve gerekli değişkenleri oluşturacağız.

drop table if exists #Names

create table #Names(
userName nvarchar(100) null,
[Name] nvarchar(200),
[Surname] nvarchar(200)
)

declare @n nvarchar(200)  -- ad
declare @sn nvarchar(200) -- soyad
declare @un nvarchar(200) -- kullanıcı adı
declare @id int -- gerçek verinin Id değeri
declare @max int -- gerçek verinin satır sayısı

Rastgele sayı üretimi için aralığı tespit etmek için gerçek verinin satır sayısı @max değişkenine atanır.

select @max = COUNT(*) from Users

Gerçek veriden ad soyad alanı sorgulanarak SUBSTRING ve CHARINDEX fonksiyonları yardımı ile ilk boşluk karakterinden ad soyad (FullName) alanı ad ve soyad alanlarına ayrıştırılıp oluşturulan geçici tabloya eklenir. TRIM fonksiyonu ile de soyadın başında oluşan boşluk karakterleri silinir.

insert into #Names([Name], [Surname])
select SUBSTRING(FullName,0, CHARINDEX(' ', FullName)), 
SUBSTRING(FullName,CHARINDEX(' ', FullName),200)
from Users  where CHARINDEX(' ', FullName) > 1

update #Names set [Surname] = TRIM([Surname])

Geçici tabloya ad soyadlar alındıktan sonra CURSOR yardımı ile gerçek tablo baştan sona dönülerek her satırın Id değeri alınır ve her satırda ORDER BY NEWID() işlemi ile rastgele bir ad ve soyad seçilir. Ad ve soyad seçildikten sonra adın ilk harfi, soyadın tamamı ve sonuna 1 – @max değişkeni arasında rastgele bir sayı ile birleştirilerek kullanıcı adı oluşturulur. Kullanıcı adı oluşturulurken kullanıcı adının daha önce oluşmuş olma ihtimaline karşılık while exists (select UserName from Users where UserName = @un) döngüsü ile oluşturulan kullanıcı adında bir kullanıcı adı var olduğu sürece yenisini oluşturulur. REPLACE fonksiyonu ile de kullanıcı adındaki Türkçe karakterler silinir. Soyadı seçerken de where CHARINDEX(‘ ‘, [Surname]) = 0 şartı ile sadece tek soyadı olanlar arasından seçim yapılır.

--SQL CURSOR KULLANIMI

	DECLARE crs CURSOR FOR
	
	SELECT Id FROM Users -- Cursur de işlenecek veriler ve listeyi select sorgusu ile çekiyoruz .

	OPEN crs -- Cursor ü açıyoruz

	FETCH NEXT FROM crs INTO @id -- Select sorgusunda gelen sütunlar sırasına göre değişkenlere atanır Örn : @id = Id

	WHILE @@FETCH_STATUS =0
		BEGIN
			
			select @n = [Name] from #Names order by NEWID()
			select @sn = [Surname] from #Names where CHARINDEX(' ', [Surname]) = 0 order by NEWID()
			set @un = lower(SUBSTRING(@n,1,1)+@sn+CONVERT(varchar, CONVERT(int, RAND()*@max+1)))
			set @un = REPLACE(@un,'ç', 'c')
			set @un = REPLACE(@un,'ı', 'i')
			set @un = REPLACE(@un,'ğ', 'g')
			set @un = REPLACE(@un,'ö', 'o')
			set @un = REPLACE(@un,'ş', 's')
			set @un = REPLACE(@un,'ü', 'u')

			while exists (select UserName from Users where UserName = @un)
			begin
				set @un = lower(  SUBSTRING(@n,1,1)+@sn+CONVERT(varchar, CONVERT(int, RAND()*@max+1)))
				set @un = REPLACE(@un,'ç', 'c')
				set @un = REPLACE(@un,'ı', 'i')
				set @un = REPLACE(@un,'ğ', 'g')
				set @un = REPLACE(@un,'ö', 'o')
				set @un = REPLACE(@un,'ş', 's')
				set @un = REPLACE(@un,'ü', 'u')
			end
			
			update Users set FullName = @n + ' ' + @sn, UserName = @un where Id = @id

			FETCH NEXT FROM crs INTO @id
 
		END

	CLOSE crs -- Cursor ü kapatıyoruz.

	DEALLOCATE crs -- Cursor ile işimiz bittiğinde sistemden tamizlememiz için DEALLOCATE etmemiz gerekmektedir.

Son işlem olarak kullanıcı adlarının sonuna ilgili domain adı eklenerek mail adresleri oluşturulur.

update Users set Email = UserName + '@domain.com'

Bütün kod: https://github.com/saitorhan/T-SqlExamples/blob/master/randomnames.sql




Visual Studio Seçenekler ve Özelleştirme

İyi bir yazılımcı olmak için kaliteli kod yazmanın yanında kullanılan IDE’nin de iyi kullanabilmesi gerekmektedir. Aşağıdaki YouTube videomuzda kendi adıma en başarılı bulduğum IDE olan Visual Studio’da görünümü özelleştirme ve ayarlarından bazıları inceliyoruz. Video içerisinde incelediğimiz bazı konu başlıkları:

  • Visual Studio başlangıç ayarları
  • Visual Studio senkronizasyonu
  • Pencerelerin ekrandaki konumları
  • Visual Studio ayarlarının yedeklenmesi ve yedekten geri dönülmesi




Visual Studio Solution Explorer – Toolbox – Properties İnceleme

İyi bir yazılımcı olmak için kaliteli kod yazmanın yanında kullanılan IDE’nin de iyi kullanabilmek gerekmektedir. Aşağıdaki YouTube videomuzda kendi adıma en başarılı bulduğum IDE olan Visual Studio’da proje yapısının kontrol edildiği Solution Explorer ve görsel programlama yapılırken kullanılan Toolbox kısımlarını inceliyoruz. Video içerisinde incelediğimiz bazı konu başlıkları:

  • Solution içerisine proje ekleme
  • Projeye referans ekleme
  • Nuget Paket Yöneticisi ile ihtiyaç duyulan ek dll dosyalarını internetten bulup projeye ekleme
  • Web Servis kullanma ve Web Servis ile NVİ üzerinden gerçek kimlik numarası doğrulama
  • Toolbox’a harici eleman ekleme
  • Seçenekler (Properties) ekranı ve özellikleri




SQL Server Veri Tabanı Snapshot Alma

Snapshot ifadesi genel olarak anlık sistemin anlık fotoğrafı olarak tanımlanabilir. Snapshot alma amacı, sistemin anlık görüntüsünü alıp sonradan sistemi önceki haline döndürmek gerekmesi durumunda döndüre bilmektir. Snapshot alındıktan sonra anlık görüntü için bir fark dosyası oluşturulur. Bu andan itibaren veri tabanında bir değişiklik yapıldığında verinin snapshot alındığı andaki hali bu fark dosyasına yazılır ve alınan bu snapshot veri tabanına bir select sorgusu geldiğinde veri değişmemişse orijinal veri tabanından, veri değişti ise önceki halini tutan snapshot veri tabanından sorgu çekilir.

SQL Server Management Studio görsel olarak snapshot alma işlemini desteklemediğinden işlemlerin T-SQL kodu ile yapılması gerekmektedir. Oluşturulan snapshotlar SSMS’de “Database Snapshots” bölümünü altında yer alır.

Oluşturulan bu snapshot veri tabanları salt okunur veri tabanlarıdır ve sadece select cümleciğini desteklerler.

Snapshot veri tabanı üzerinde UPDATE işlemi ve alınan hata

SSMS Database Snapshots

Snapshot almak için yazılması gereken T-SQL kodu aşağıdaki gibidir.

CREATE DATABASE snapshot_olarak_olusturulacak_dbAd

ON

(

NAME =Mantıksal_dosya_ad,

FILENAME ='olusturulacak_dosya_tam_ad'

)

AS SNAPSHOT OF kaynak_dbAd

Aşağıdaki kodda da AdventureWorks veri tabanının bir snapshotunun alınmasını görüyoruz.

CREATE DATABASE AdventureWorks_dbss1800 ON  
( NAME = AdventureWorks2017,
FILENAME =   
'C:\Db\AdventureWorks_data_1800.ss' )  
AS SNAPSHOT OF AdventureWorks2017;  
GO  

Aşağıda snapshot alındıktan sonra değiştirilen verinin orijinal veri tabanından ve aynı verinin snapshot veri tabanından sorgulanması ve sonucunu görüyoruz.

--Snapshot alındıktan sonra değiştirilen veri sorgusu
select 'Orijinal Veri', FirstName, LastName from AdventureWorks2017.[Person].[Person] where BusinessEntityID = 1

--Snapshot alındıktan sonra değiştirilen verinin snapshot veri tabanından sorgusu
select 'Snapshot Veri', FirstName, LastName from AdventureWorks_dbss1800.[Person].[Person] where BusinessEntityID = 1

Sistemde Var Olan Snapshotları Görmek için sys.databases kataloğundan source_database_id değeri NULL olmayan veri tabanları sorgulanır.

select * from sys.databases where source_database_id is not null

Veri tabanının snapshot zamanında ki durumuna dönmek için de aşağıdaki kodu kullanabiliriz. Snapshot verisine dönebilmek için veri tabanına kullanıcıların bağlı olmaması gerekmektedir. Kullanıcıların bağlı olması durumunda geri dönme sırasında aşağıdaki hata alınır.

USE master;  
-- AdventureWorks2017 veri tabanını AdventureWorks_dbss1800 zamanına döndürme  
RESTORE DATABASE AdventureWorks2017 from   
DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';  
GO  

Geri dönüş olduktan sonra az önce değiştirdiğimiz veriyi asıl veri tabanından sorgulayıp sonucu görelim.

Yazımızı bitirmeden snapshot veri tabanları konusunda söylememiz gereken son bir konu da, snapshotların kendi başlarına bir veri tabanı olmadıkları ve sistemde yaşamaları kaynak veri tabanlarının sistemde yaşıyor olması gerekliliğidir.




Python Kurulum ve İlk Kod

Python, nesne yönelimli, yorumlamalı, birimsel (modüler) ve etkileşimli yüksek seviyeli bir programlama dilidir. Girintilere dayalı basit sözdizimi, dilin öğrenilmesini ve akılda kalmasını kolaylaştırır. Bu da ona söz diziminin ayrıntıları ile vakit yitirmeden programlama yapılmaya başlanabilen bir dil olma özelliği kazandırır. Modüler yapısı, sınıf dizgesini (sistem) ve her türlü veri alanı girişini destekler. Hemen hemen her türlü platformda çalışabilir. (Unix , Linux, Mac, Windows, Amiga, Symbian). Python ile sistem programlama, kullanıcı arabirimi programlama, ağ programlama, web programlama, uygulama ve veritabanı yazılımı programlama gibi birçok alanda yazılım geliştirebilirsiniz. Büyük yazılımların hızlı bir şekilde prototiplerinin üretilmesi ve denenmesi gerektiği durumlarda da C ya da C++ gibi dillere tercih edilir.

Vikipedi

Python dilinin kısa tanımından sonra kurulum işlemi ile Python serimize başlıyoruz.

https://www.python.org/downloads/ adresinden Python dilinin son sürümünü bilgisayarımıza indiriyoruz. Daha sonra “Next, Next” diyerek kurulumu yapıyoruz. Kurulum yaparken aşağıdaki ekran görüntüsünde işaretli alanı seçtiğinizden emin olun. Bu seçenek ile Python dili bilgisayarın PATH değişkenine eklenmiş olur. Bu şekilde komut satırına “python” yazıp ENTER’a basıldıktan sonra Python başlayacaktır.

Kurulum işlemi bittikten sonra test işlemini yapabiliriz.

PhCharm İle İlk Proje

Python projelerimizi serimiz süresince PyCharm uygulaması ile yazıyor olacağız. “Create New Project” butonu ile yeni proje oluşturma ekranını açıyoruz.

Yeni proje oluşturma ekranımızda “Location” alanına projenin kaydedileceği klasör yolunu veriyoruz. “Project Interpreter…” seçeneği altında eyr alan “New environment using” seçeneğinde “Virtualenv” seçeneğini seçiyoruz. Bu seçenek sayesinde projemiz için sanal bir Python alanı oluşturuluyor ve Python üzerinde yapılan değişiklik bu projeye özgü olmaktadır. Böylece bilgisayarımızdaki ana Python sürümü yapılan değişikliklerinden etkilenmemektedir. “Create” butonuna basarak projeyi oluşturuyoruz.

Projeye ilk py dosyamızı eklemek için yukarıdaki ekran resminde göründüğü şekilde proje adını sağ tıklayıp New seçeneğinden Python File seçiyoruz.

Açılan açılır pencereden dosya adını yazıp ENTER tuşuna basıyoruz.

İlk kodumuzu yazdıktan sonra ekrana sağ tıklayıp “Run File in Python Console” tıklayarak kodumu çalıştırıyoruz.




C# Mükemmel Sayı Testi

Kendisi hariç bütün pozitif çarpanları (tam bölenleri) toplamı, yine kendisine eşit olan sayılara ”mükemmel sayı” denir. Örneğin 6=1+2+3 ve 28=1+2+4+7+14 gibi. Buna göre klavyeden girilen bir tam sayının “mükemmel sayı” olup olmadığını kontrol eden C# programını kodlarını yazınız

https://github.com/saitorhan/SizdenGelenler06




C# Console Komisyon Hesaplama

Bir komisyoncu sattığı mallardan fiyatı 50 TL kadar olanlardan %3, daha fazla olanlardan ise %2 komisyon almaktadır. Klavyeden girilen teker teker girilen 5 malın komisyonlarını bulup ekrana yazdıran ve en sonunda da toplam komisyonu ekrana yazdıran programını yazınız.

https://github.com/saitorhan/SizdenGelenler05




(C# Console, Diziler) Meteoroloji Sıcaklık Analizi

Meteoroloji merkezi için bir program tasarlanılması istenilmiştir. Programın çalışma şekli ise şöyle olmalıdır:

a. İlk önce hangi ay için sıcaklık bilgisi girileceği kullanıcıya sorulacaktır.

b. Girilen ay bilgisine uygun olarak o ayda kaç tane gün var ise kullanıcıdan gün sayısı kadar sıcaklık bilgisi girilmesi istenilecektir (şubat ayı için gün sayısını 28 alınız).

c. Sıcaklık veri girişi bittikten sonra o ayın sıcaklık ortalaması ve en düşük sıcaklık bilgisi ekrana yazdırılacaktır. Bu işlemden sonra program sonlanacaktır. Örnek Çıktı: Şubat Ayına ait Ortalama Sıcaklık=15,6 derecedir ve En düşük sıcaklık 6.Gün=10, 1 derecedir.

https://github.com/saitorhan/SizdenGelenler04




C# Console Toplama İşlemi Oyunu

Toplama işlemini öğretmeye çalışan bir oyun programı yazılacaktır. Oyun başladığı zaman rastgele 2 tane 1-100 arasında sayı tutulacak, tutulan sayılar ekrana gösterilecek ve kullanıcıya bu sayıların toplamı nedir diye sorulacaktı Eğer kullanıcı doğru cevap verirse “Tebrikler Bildiniz” Değil ise “Üzgünüm Bilemediniz” diye mesaj verecektir. Her cevaptan sonra “Tekrar Oynamak istiyormusunuz(e/E)?” şeklinde bir soru sorulacak ve eğer kullanıcı “e” veya “E” ile karşılık verirse oyun tekrar başlayacaktır. Kullanıcının puanı her doğru cevap için 5 puan artacak, her yanlış cevap için ise 2 puan azalacaktır. Oyun sonlandığında kullanıcının verdiği doğru cevap sayısı, yanlış cevap sayısı ve puanı ekranda listelenmelidir. Bu işlemleri yapan programın C# kodlarını yazınız.

https://github.com/saitorhan/SizdenGelenler03




C# Sayıyı Basamaklarına Ayırma

Klavyeden girilen herhangi bir sayıyı basamaklarına ayırıp her bir basamak değerini ve sayının kaç basamaklı olduğunu ekrana yazan C# programını yazın? Not: Hazır string ya da char fonksiyonlar kullanmayın. Girilen sayının basamak sayısı belli değildir. Her hangi bir sayı girildiğinde program doğru bir şekilde çalışmalıdır. Örneğin 123 girilmişse programın ekran çıktısı: 1 tane 100’luk, 2 tane 10’luk, 3 tane 1’lik; sayı 3 hanelidir şeklinde olmalıdır.

https://github.com/saitorhan/SizdenGelenler02