Verileri Değiştirmeyi Kullanma
Oracle, veritabanında veri işlemlerini gerçekleştirmek için Veri İşleme Dili komutları sağlar. Veri işlemleri, veritabanı tablolarını uygulama veya iş verileri ile doldurabilir, verileri değiştirebilir ve gerektiğinde verileri veritabanından kaldırabilir. Veri işlemlerinin yanı sıra, bu işlemleri kontrol etmek için kullanılan komutlar vardır.Bu komutlar İşlem Kontrol Dili olarak gruplandırılmıştır.
Mantıksal bir SQL işleminde yer alan üç tür DML ifadesi vardır: Ekle, Güncelle, Sil ve Birleştir Bir işlem, bir veritabanı oturumu içindeki DML eylemlerinin mantıksal koleksiyonudur.
INSERT ifadesi
INSERT komutu, verileri tablolarda saklamak için kullanılır. INSERT komutu genellikle gömülü bir SQL komutu olarak Visual Basic.NET veya C ++ gibi üst düzey programlama dillerinde kullanılır; ancak bu komut, komut modunda SQL * PLUS isteminde de çalıştırılabilir. INSERT komutunun iki farklı formu vardır. İlk form, yeni bir satırda satırın her sütununa bir değer girilecekse kullanılır. INSERT komutunun ikinci biçimi, sütun verilerinin bir kısmının bilinmediği veya başka bir iş mantığından varsayılan olarak alındığı satırları eklemek için kullanılır. INSERT komutunun bu formu, verilerin depolandığı sütun adlarını belirtmenizi gerektirir.
Sözdizimi:
Tablodaki tüm sütunların değerleri kesin ve biliniyorsa aşağıdaki sözdizimi izlenebilir.
INSERT INTO table
VALUES (column1 value, column2 value,
...);
Tablodaki yalnızca birkaç sütunun bir değerle doldurulması gerekiyorsa aşağıdaki sözdizimi kullanılabilir. Sütunların geri kalanı, değerlerini NULL olarak veya farklı bir iş mantığından çıkarabilir.
INSERT INTO table (column1 name, column2 name, . . .)
VALUES (column1 value, column2 value, . . .);
Aşağıdaki INSERT ifadesi, EMPLOYEES tablosunda yeni bir çalışan kaydı oluşturur. EMPLOYEE_ID, FIRST_NAME, SALARY ve DEPARTMENT_ID birincil sütunlarının değerlerini eklediğine dikkat edin.
INSERT INTO employees (EMPLOYEE_ID, FIRST_NAME, SALARY, DEPARTMENT_ID)
VALUES (130, 'KEMP', 3800, 10);
Aksi takdirde, eksiksiz çalışan verileri, aşağıdaki INSERT ifadesi kullanılarak sütun listesi belirtilmeksizin - değerlerin önceden bilinmesi ve tablodaki sütunların veri türü ve konumuna uygun olması koşuluyla - EMPLOYEES tablosuna eklenebilir.
INSERT INTO employees
VALUES (130, 'KEMP','GARNER', '[email protected]', '48309290',TO_DATE ('01-JAN-2012'), 'SALES', 3800, 0, 110, 10);
Eklenecek değerler, sütunun veri türü ile uyumlu olmalıdır. Değişmezler, sabit değerler ve işlevler, SYSDATE, CURRENT_DATE, SEQ.CURRVAL (NEXTVAL) veya USER gibi özel değerler sütun değerleri olarak kullanılabilir. Belirtilen değerler genel kurallara uymalıdır. Dize değişmezleri ve tarih değerleri tırnak içine alınmalıdır. Tarih değeri, DD-MON-RR veya D-MON-YYYY formatında sağlanabilir, ancak YYYY, yüzyılı açıkça belirttiği ve dahili RR yüzyıl hesaplama mantığına bağlı olmadığı için tercih edilir.
INSERT-AS-SELECT (IAS) ifadesi
Veriler, INSERT..AS..SELECT (IAS) işlemi kullanılarak kaynak tablodan hedef tabloya doldurulabilir. Doğrudan yol okuma işlemi. Verilerin bir tablodan diğerine kopyasını oluşturmanın veya kaynak tablo işlemlerinin çevrimiçi olduğu tablonun yedek kopyasını oluşturmanın basit bir yoludur.
Örneğin, veriler EMPLOYEES tablosundan EMP_HISTORY tablosuna kopyalanabilir.
INSERT INTO EMP_HISTORY
SELECT EMPLOYEE_ID, EMPLOYEE_NAME, SALARY, DEPARTMENT_ID
FROM employees;
UPDATE ifadesi
UPDATE komutu, bir sütunda depolanan verileri değiştirir. WHERE yan tümcesinde belirtilen koşullara göre filtrelenen sonuç kümesine bağlı olarak bir seferde tek veya birden çok satırı güncelleyebilir. Sütunları güncellemenin sütunları değiştirmekten farklı olduğunu unutmayın. Bu bölümün başlarında, ALTER komutunu incelediniz. ALTER komutu tablo yapısını değiştirir, ancak tablo verilerini etkilenmeden bırakır. UPDATE komutu, tablo yapısını değil tablodaki verileri değiştirir.
Sözdizimi:
UPDATE table
SET column = value [, column = value ...]
[WHERE condition]
Sözdiziminden,
SET sütunu = ifadesi, belirtilen sütun adındaki verileri güncelleyecek herhangi bir karakter, formül veya işlev kombinasyonu olabilir. WHERE yan tümcesi isteğe bağlıdır, ancak dahil edilirse hangi satırların güncelleneceğini belirtir. Yalnızca bir tablo UPDATE komutuyla bir defada güncellenebilir.
Aşağıdaki GÜNCELLEME bildirimi, JOHN çalışanının maaşını 5000'e günceller.
UPDATE employees
SET salary = 5000
WHERE UPPER (first_name) = 'JOHN';
WHERE tahminleri isteğe bağlıdır, ancak tablodaki yalnızca gerekli satırı değiştirmek için mantıksal olarak eklenmelidir. Aşağıdaki GÜNCELLEME beyanı, tablodaki tüm çalışanların maaşlarını günceller.
UPDATE employees
SET salary = 5000;
Birden çok sütun, SET yan tümcesinde virgülle ayrılmış birden çok sütun belirtilerek de güncellenebilir. Örneğin, JOHN için hem maaş hem de iş rolünün sırasıyla 5000 ve SATIŞ olarak değiştirilmesi gerekiyorsa, GÜNCELLEME ifadesi şöyle görünür:
UPDATE employees
SET SALARY = 5000,
JOB_ID = 'SALES'
WHERE UPPER (first_name) = 'JOHN';
1 row updated.
Aynı satırdaki birden çok sütunu güncellemenin başka bir yolu da alt sorgu kullanımını gösterir.
UPDATE employees
SET (SALARY, JOB_ID) = (SELECT 5000, 'SALES' FROM DUAL)
WHERE UPPER (ENAME) = 'JOHN'
DELETE ifadesi
DELETE komutu, SQL ifadelerinin en basitlerinden biridir. Bir tablodan bir veya daha fazla satırı kaldırır. SQL'de çoklu tablo silme işlemlerine izin verilmez. DELETE komutunun sözdizimi aşağıdaki gibidir.
DELETE FROM table_name
[WHERE condition];
DELETE komutu, isteğe bağlı WHERE yan tümcesindeki koşulu karşılayan tablodaki tüm satırları siler. WHERE yan tümcesi isteğe bağlı olduğundan, WHERE yan tümcesi DELETE işleminin kapsamını sınırladığından, bir WHERE yan tümcesi atlanarak bir tablodaki tüm satırlar kolayca silinebilir.
Aşağıdaki DELETE ifadesi EDWIN'in ayrıntılarını EMP tablosundan kaldıracaktır.
DELETE employees
WHERE UPPER (ENAME) = 'EDWIN'
1 row deleted.
Not: [TABLO ADI] 'nı SİL ve [TABLO ADINDAN SİL] aynı anlamı taşır.
Koşullu silme ifadelerindeki WHERE koşulu, aşağıda gösterildiği gibi alt sorguyu kullanabilir.
DELETE FROM employees
WHERE DEPARTMENT_ID IN (SELECT DEPARTMENT_ID
FROM LOCATIONS
WHERE LOCATION_CODE = 'SFO')
TRUNCATE
Kesmek, bir tablodaki tüm kayıtları temizlemek için kullanılan ancak tablo yapısını koruyan bir DDL komutudur. Seçilen kayıtları kaldırmak için WHERE koşulunu desteklemez.
Sözdizimi:
TRUNCATE [table name]
Auto Commit yani oturumdaki mevcut aktif işlemi taahhüt eder. Tablonun kırpılması, bağımlı dizinleri, tetikleyicileri veya tablo kısıtlamalarını düşürmez. Bir tablo A, veritabanındaki bir B tablosunun bir referans kısıtlamasının ebeveyniyse, tablo A kesilemez.
İşlem
İşlem, veri tabanında yapılan mantıksal bir iş birimidir. Ya içerebilir -
TCL komutu ile biten çoklu DML komutları, örn. COMMIT veya ROLLBACK
Bir DDL komutu
Bir DCL komutu
Bir işlemin başlangıcı ilk DML komutu ile işaretlenir. TCL, DDL veya DCL komutuyla biter. COMMIT veya ROLLBACK gibi bir TCL komutu, aktif bir işlemi sonlandırmak için açıkça yayınlanır. Temel davranışları sayesinde, DDL veya DCL komutlarından herhangi biri bir veritabanı oturumunda yürütülürse, oturumda devam eden aktif işlemi gerçekleştirin. Veritabanı örneği olağandışı bir şekilde çökerse, işlem durdurulur.
COMMIT, ROLLBACK ve SAVEPOINT işlem kontrol dilleridir. COMMIT, veri değişikliklerini kalıcı olarak veritabanına uygularken, ROLLBACK anti-commit işlemi yapar. SAVEPOINT, farklı işlem aşamalarında işaretler belirleyerek bir işlem dizisini kontrol eder. Kullanıcı, mevcut işlemi daha önce ayarlanmış olan istenen kaydetme noktasına geri alabilir.
COMMIT- Commit, veri değişikliklerini kalıcı olarak veritabanı tablolarına uygulayarak mevcut aktif işlemi sonlandırır. COMMIT, işlemi açıkça sonlandıran bir TCL komutudur. Ancak DDL ve DCL komutu, işlemi dolaylı olarak taahhüt eder.
SAVEPOINT- Savepoint, oturumdaki mevcut işlemde belirli bir noktayı işaretlemek için kullanılır. İşlemde mantıksal işaretleyici olduğu için veri sözlüklerinde kayıt noktaları sorgulanamaz.
ROLLBACK- ROLLBACK komutu, veri değişikliklerini atarak tüm işlemi sonlandırmak için kullanılır. İşlem, işaretli kayıt noktaları içeriyorsa, işlemi yalnızca belirtilen kayıt noktasına kadar geri almak için ROLLBACK TO SAVEPOINT [ad] kullanılabilir. Sonuç olarak, belirtilen kayıt noktasına kadar olan tüm veri değişiklikleri atılacaktır.
Gösteri
Her yılın ilk çeyreğinde yeni işe alınan çalışan ayrıntılarıyla doldurulan ÇALIŞANLAR tablosunu düşünün. Büro personeli, veri besleme faaliyeti sırasında herhangi bir anda herhangi bir hatalı veriyi geri almak için her çalışanın ayrıntılarını bir kayıt noktasıyla ekler. Kayıt noktası adlarını çalışan adlarıyla aynı tuttuğunu unutmayın.
INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (105, 'Allen',TO_DATE ('15-JAN-2013','SALES',10000,10);
SAVEPOINT Allen;
INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (106, 'Kate',TO_DATE ('15-JAN-2013','PROD',10000,20);
SAVEPOINT Kate;
INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (107, 'McMan',TO_DATE ('15-JAN-2013','ADMIN',12000,30);
SAVEPOINT McMan;
Diyelim ki, veri besleme operatörü 'Kate' ve 'McMan' maaşını yanlış girdiğini anladı. Aktif işlemi kayıt noktası Kate'e geri alır ve Kate ve McMan için çalışan ayrıntılarını yeniden girer.
ROLLBACK TO SAVEPOINT Kate;
INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (106, 'Kate',TO_DATE ('15-JAN-2013','PROD',12500,20);
SAVEPOINT Kate;
INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (107, 'McMan',TO_DATE ('15-JAN-2013','ADMIN',13200,30);
SAVEPOINT McMan;
Veri girişini tamamladıktan sonra, mevcut oturumda COMMIT yayınlayarak tüm işlemi gerçekleştirebilir.
Tutarlılığı Okuyun
Oracle, veri erişimi ve okuma / yazma eylemleri açısından her oturumda kullanıcılar arasında tutarlılığı korur.
Bir tabloda bir DML oluştuğunda, eylem tarafından değiştirilen orijinal veri değerleri veritabanı geri alma kayıtlarına kaydedilir. İşlem veritabanına kaydedilmediği sürece, başka bir oturumda daha sonra değiştirilen verileri sorgulayan herhangi bir kullanıcı, orijinal veri değerlerini görüntüler. Oracle, bir sorgu için bir tablonun verilerinin okunarak tutarlı bir görünümünü oluşturmak için sistem global alanındaki mevcut bilgileri ve geri alma kayıtlarındaki bilgileri kullanır. Yalnızca bir işlem yapıldığında, işlemin değişiklikleri kalıcı hale gelir. İşlem, Oracle'ın okuma tutarlılığı sağlama stratejisinin anahtarıdır.
Okuyucular adına tutarlı okuma görünümleri için başlangıç noktası oluşturulur
Değiştirilen verilerin ne zaman okunması veya güncellenmesi için veritabanının diğer işlemleri tarafından görülebileceğini kontrol eder